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 tables sont principalement MyISAM avec un petit InnoDB. Le serveur n'a aucune autre connexion active. SHOW PROCESSLIST;
affiche uniquement l'insertion de la restauration (et la liste de processus d'exposition 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?
Réponses:
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
etSET FOREIGN_KEY_CHECKS=1
).la source
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
Et mettez ces instructions à la fin du fichier de vidage
Cela a fonctionné pour moi. Bonne restauration :-)
la source
cat pre.sql dump.sql post.sql | mysql ...
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 le tout à la fois.
la source
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.
la source
si vous avez plusieurs tables, vous pourriez bénéficier de mk-parallel-restore .
la source
Cela fera:
mysql --init-command = "SET SESSION FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;" -u racine -p <Backup_Database.mysql
la source
Je vous ai suggéré,
AUTOCOMMIT=0
,UNIQUE_CHECKS=0
,FOREIGN_KEY_CHECKS=0
( ET NE PAS OUBLIER DE CHANGEMENTS ROLLBACK CE )mysql -u root -pPasss requests < mydb.sql
Bonne chance
la source