[mysql] MyISAM의 모든 테이블을 InnoDB로 변환하는 방법은 무엇입니까?

테이블 스토리지를 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

위의 명령문과 명령 행에서 “데이터베이스 이름”을 바꾸십시오.