En tant que DBA MySQL, je fais confiance à MySQL pour effectuer la conversion en demandant à MySQL d'écrire le script pour moi.
Formez la commande Linux exécutez cette requête
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
Le script convertira d'abord les plus petites tables. Ce script a également ignoré toutes les tables MyISAM qui ont des index FULLTEXT.
Après avoir regardé le script, vous pouvez simplement l'exécuter dans MySQL comme suit:
mysql -h... -u... -p... -A < /root/ConvertMyISAM2InnoDB.sql
ou si vous voulez voir le calendrier de chaque conversion, connectez-vous à mysql et exécutez ceci:
mysql> source /root/ConvertMyISAM2InnoDB.sql
Cela ne devrait pas être gâché car un verrouillage complet de la table se produit lors de l'exécution de la conversion.
Une fois que toutes les tables sont converties, vous devez ajuster les paramètres MySQL pour l'utilisation d'InnoDB et réduire le key_buffer.
Veuillez lire ceci pour définir le pool de tampons InnoDB: /dba/1/what-are-the-main-differences-between-innodb-and-myisam/2194#2194
Veuillez également lire ceci: /drupal/1715/what-would-the-optimal-mysql-configuration-for-a-drupal-7-site-be/2367#2367
Essaie !!!