web-dev-qa-db-fra.com

Comment accélérer une restauration MySQL à partir d'un fichier de vidage?

Je restaure une base de données de 30 Go à partir d'un fichier mysqldump vers une base de données vide sur un nouveau serveur. Lors de l'exécution du SQL à partir du fichier de vidage, la restauration démarre très rapidement puis commence à devenir de plus en plus lente. Les insertions individuelles prennent maintenant plus de 15 secondes. Les tableaux sont principalement MyISAM avec un petit InnoDB. Le serveur n'a aucune autre connexion active. SHOW PROCESSLIST; ne montre que l'insertion de la restauration (et la liste de processus show elle-même).

Quelqu'un at-il une idée de ce qui pourrait être à l'origine du ralentissement spectaculaire?

Y a-t-il des variables MySQL que je peux changer pour accélérer la restauration pendant qu'elle progresse?

29
Dave Forgac

Une chose qui peut ralentir le processus est le key_buffer_size , qui est la taille du tampon utilisé pour les blocs d'index. Réglez cela sur au moins 30% de votre RAM ou le processus de réindexation sera probablement trop lent.

Pour référence, si vous utilisiez InnoDB et des clés étrangères, vous pouvez également désactiver les vérifications de clés étrangères et les réactiver à la fin (en utilisant SET FOREIGN_KEY_CHECKS=0 et SET FOREIGN_KEY_CHECKS=1).

26
Marco Ramos

Ce lien montre ce que l'on peut faire pour accélérer le processus de restauration.

http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html

On peut mettre les commandes en haut du fichier de vidage

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

Et mettez ces instructions à la fin du fichier de vidage

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

Cela a fonctionné pour moi. Bonne restauration :-)

23
Dharmesh Tailor

Si vous avez la copie physique du fichier de vidage (le répertoire DB), vous pouvez simplement la copier sur le nouveau serveur si le nouveau serveur a la même version MySQL et cela fonctionnera correctement. Cela fonctionne bien avec MyISAM et pour moi, je pense que c'est mieux que de restaurer les données basées sur le fichier de vidage SQL logique.

1
usef_ksa

La seule raison pour laquelle je peux imaginer pourquoi la restauration ralentirait progressivement est l'indexation. Envisagez de désactiver l'indexation jusqu'à la fin, puis laissez-le faire tout de suite.

1
John Gardeniers

Cela fera:

mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u racine -p <Backup_Database.mysql

0
Matiss

si vous avez plusieurs tables, vous pourriez bénéficier de mk-parallel-restore .

0
pQd