Як MySQL DBA, я довіряю 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
Спробувати !!!