테이블 스토리지를 MyISAM에서 InnoDB로 변경하기 위해 개별적으로 alter table을 발행 할 수 있다는 것을 알고 있습니다.
모든 것을 InnoDB로 빠르게 변경할 수있는 방법이 있는지 궁금합니다.
답변
<?php
// connect your database here first
//
// Actual code starts here
$sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'your_database_name'
AND ENGINE = 'MyISAM'";
$rs = mysql_query($sql);
while($row = mysql_fetch_array($rs))
{
$tbl = $row[0];
$sql = "ALTER TABLE `$tbl` ENGINE=INNODB";
mysql_query($sql);
}
?>
답변
이 SQL 문 (MySQL 클라이언트, phpMyAdmin 또는 어디에서나)을 실행하여 데이터베이스의 모든 MyISAM 테이블을 검색하십시오.
name_of_your_db
변수 값을 데이터베이스 이름으로 바꾸십시오.
SET @DATABASE_NAME = 'name_of_your_db';
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS sql_statements
FROM information_schema.tables AS tb
WHERE table_schema = @DATABASE_NAME
AND `ENGINE` = 'MyISAM'
AND `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;
그런 다음 출력을 복사하고 새 SQL 쿼리로 실행하십시오.
답변
SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;')
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE='MyISAM'
AND table_schema = 'mydatabase';
매력처럼 작동합니다.
일괄 처리로 실행할 수있는 대체 쿼리가있는 모든 테이블 목록이 제공됩니다.
답변
아래 스크립트에서 <username>, <password> 및 <schema>를 특정 데이터로 바꾸십시오.
mysql 클라이언트 세션에 복사하여 붙여 넣을 수있는 명령문을 표시하려면 다음을 입력하십시오.
echo 'SHOW TABLES;' \
| mysql -u <username> --password=<password> -D <schema> \
| awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = InnoDB;"}' \
| column -t \
단순히 변경을 실행하려면 다음을 사용하십시오.
echo 'SHOW TABLES;' \
| mysql -u <username> --password=<password> -D <schema> \
| awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = InnoDB;"}' \
| column -t \
| mysql -u <username> --password=<password> -D <schema>
신용 : 이것은 이 기사 에 요약 된 내용의 변형입니다 .
답변
한 줄:
mysql -u root -p dbName -e
"show table status where Engine='MyISAM';" | awk
'NR>1 {print "ALTER TABLE "$1" ENGINE = InnoDB;"}' |
mysql -u root -p dbName
답변
이것을 phpMyAdmin에서 SQL 쿼리로 사용하십시오.
SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=InnoDB;')
FROM information_schema.tables
WHERE engine = 'MyISAM';
답변
mysql 명령 행 도구에서이 명령문을 실행할 수 있습니다.
echo "SELECT concat('ALTER TABLE `',TABLE_NAME,'` ENGINE=InnoDB;')
FROM Information_schema.TABLES
WHERE ENGINE != 'InnoDB' AND TABLE_TYPE='BASE TABLE'
AND TABLE_SCHEMA='name-of-database'" | mysql > convert.sql
다음을 사용하여 사용자 이름과 비밀번호를 지정해야 할 수도 있습니다. mysql -u username -p 결과는 mysql로 다시 파이프 할 수있는 SQL 스크립트입니다.
mysql name-of-database < convert.sql
위의 명령문과 명령 행에서 “데이터베이스 이름”을 바꾸십시오.