Как администратор базы данных MySQL, я доверяю MySQL, чтобы выполнить преобразование, предложив MySQL написать сценарий для меня.
Сформируйте команду Linux и выполните этот запрос
mysql -h... -u... -p... -A --skip-column-names -e"SELECT CONCAT('ALTER TABLE ',db,'.',tb,' ENGINE=InnoDB;') FROM (SELECT A.db,A.tb,A.tbsize FROM (SELECT table_schema db,table_name tb,(data_length+index_length) tbsize FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) A LEFT JOIN (SELECT table_schema db,table_name tb FROM information_schema.statistics WHERE index_type='FULLTEXT') B USING (db,tb) WHERE B.db IS NULL) AA ORDER BY tbsize" > /root/ConvertMyISAM2InnoDB.sql
Скрипт сначала преобразует самые маленькие таблицы. Этот скрипт также обходил любые таблицы MyISAM, имеющие индексы FULLTEXT.
Просматривая скрипт, вы можете просто запустить его в MySQL следующим образом:
mysql -h... -u... -p... -A < /root/ConvertMyISAM2InnoDB.sql
или, если вы хотите увидеть время каждого преобразования, войдите в MySQL и запустите это:
mysql> source /root/ConvertMyISAM2InnoDB.sql
Это не должно быть испорчено, потому что полная блокировка таблицы происходит, когда выполняется преобразование.
Как только все таблицы преобразованы, вам нужно настроить параметры MySQL для использования InnoDB и уменьшить key_buffer.
Пожалуйста, прочтите это для настройки пула буферов InnoDB: /dba/1/what-are-the-main-differences-between-innodb-and-myisam/2194#2194
Пожалуйста, прочтите это также: /drupal/1715/what-would-the-optimal-mysql-configuration-for-a-drupal-7-site-be/2367#2367
Попробуйте!