Mysqldump + InnoDB + grosse table
vendredi 27 juillet 2007 à 16:17 (Julien Tartarin)
Pour dumper une grosse table InnoDB (manipulation inutile en MyISAM) malgré de nombreux accès clients simultanés, sans perte de performances, il ne faut surtout pas utiliser l'option --opt de mysqldump qui ajoutera un verrou sur la table et mettra en attente toutes les requêtes secondaires pendant toute la durée du dump, qui peut atteindre plusieurs minutes ou dizaines de minutes selon les cas...
Au lieu de ça, le plus efficace est d'ajouter les options suivantes :
--extended-insertou-e: le résultat du dump sera optimisé avec des insert multiples : moins de texte brut et plus de performances lors de la récupération des données--quickou-q: pour ne pas utiliser de buffer lors de la lecture des tables (le cas contraire saturerait la RAM en quelques secondes)--single-transaction: le plus important, ou presque, qui permettra de ne lire que l'état de la table au début du dump, malgré les modifications qu'elle peut continuer à accepter.
Le reste des options, hormis --opt et --lock-tables, est variable et à la convenance de l'utilisateur.
Rediriger le flux STDOUT directement vers gzip ou bzip2 permet d'économiser un espace non négligeable sur le disque : pour une table de 160 Mo une fois dumpée, 13 Mo après le passage de bzip2, ça fait mal !
Conclusion : mysqldump -q -e --single-transaction base | bzip2 -c > base.sql.bz2

#1 Le lundi 30 juillet 2007 à 04:11, par cryptographp
Eh, merci pour les infos intéressantes
#2 Le vendredi 3 août 2007 à 12:15, par Olivier D
Attention au buffer de bzip2 : si bzip2 a du mal à suivre et à récupérer les données de mysqldump, alors mysqldump sera ralenti (le pipe est bloquant).
=> utiliser plutot --result-file="truc.sql", et compresser après.