MySQL5.1でMyISAMからInnoDBに変更する

ダンプデータからデータを復元したら

なぜかInnoDBからMyISAMになってたりすることがあった場合、打ちひしがれながら以下のSQLで

全テーブルのInnoDBへの変更のSQLを作成します。

SELECT
  CONCAT("ALTER TABLE ", information_schema.`TABLES`.TABLE_SCHEMA, "." ,information_schema.`TABLES`.TABLE_NAME , " ENGINE InnoDB;") AS "SQL"
FROM
  information_schema.`TABLES`
WHERE
  information_schema.`TABLES`.`ENGINE` = "MyISAM"
AND
  information_schema.`TABLES`.TABLE_SCHEMA != "mysql"
AND
  information_schema.`TABLES`.TABLE_SCHEMA != "information_schema"

ちなみにダンプデータから復旧したときにMyISAMになってしまうケースとしては、

「/etc/my.cnf」の「innodb_log_file_size」を変更してmysqlを再起動すると、

ログのサイズが合っていないと警告が出てinnodbが使用できなくなり、

その状態でダンプから復旧するとこうなります。

 

参考:http://qiita.com/nyatakasan/items/5f69527ccdde19d65ff0