2017-06-22 1 views
0

Je veux changer le moteur de 2 millions de lignes de la table MyISAM à InnoDB. J'ai peur de cette opération de longue date, j'ai donc créé une structure similaire InnoDB table et maintenant je veux copier toutes les données de l'ancien à celui-ci. Quel est le moyen le plus rapide? SELECT INSÉRER? Qu'en est-il de START TRANSACTION? S'il vous plaît, aidez. Je ne veux pas accrocher mon serveur.moteur de changement MySQL grandes lignes de tableau millions

+0

Programmer un temps d'arrêt. – ajreal

Répondre

0

vous une faveur: copier l'ensemble de l'installation sur votre machine locale et essayer tout là-bas. Vous aurez une bien meilleure idée de ce que vous entreprenez. Soyez conscient des différences potentielles de matériel entre votre serveur de production et votre machine locale.

La façon la plus rapide est probablement la façon la plus simple:

INSERT INTO table2 SELECT * FROM table1; 
0

Je pense que vous ne pouvez pas le faire plus vite que ce qui est construit dans le ALTER. Et il doit copier toutes les données et reconstruire tous les index.

Assurez-vous d'avoir innodb_buffer_pool_size soulevé pour se préparer à InnoDB. Et plus bas key_buffer_size pour permettre la pièce. Suggérer 35% et 12% de RAM, respectivement, pour la transition. Après que toutes les tables sont converties, suggérez 70% et seulement 20MB.

Une légère accélération consiste à effectuer une sélection qui récupère la totalité de la table et la totalité de PRIMARY KEY (si elle peut être mise en cache). Cela fera quelques E/S avant de vraiment démarrer. Exemple: SELECT avg(id) FROM tbl où id est la clé primaire. Et SELECT avg(foo) FROM tbl où foo n'est pas indexé mais numérique. Ceux-ci forceront une analyse complète de l'index PK et des données, mettant ainsi en cache les informations que le ALTER devra lire.

Autres conseils sur la conversion: http://mysql.rjweb.org/doc.php/myisam2innodb.