Après quelques recherches, je me suis retrouvé avec les paramètres suivants:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Jusqu'ici tout va bien mais j'ai quelques questions concernant les paramètres ainsi que l'exécution.
En ce qui concerne ma première préoccupation, je veux juste m'assurer que tous sont nécessaires et ne causent aucun conflit lorsqu'ils sont utilisés ensemble. En fin de compte, je voudrais créer un fichier de vidage très robuste et cohérent, avec des millions d'enregistrements, qui crée des tables, des bases de données et insère des données. La bonne chose est que rendre la base de données indisponible pendant un certain temps n'est pas un problème pour moi. Mon seul objectif est de créer un fichier de vidage robuste et cohérent.
Concernant mon deuxième concert, je voudrais savoir comment m'informer quand la commande va mal et si oui lever une exception.
Des idées?
ÉDITER
Ceci est ma commande mysqldump mise à jour basée sur les commentaires de RolandoMySQLDBA.
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
la source
Réponses:
Vous allez trouver cela choquant, mais vous n'avez besoin que d'une option majeure: --opt
Qu'est-ce que --opt ?
Puisque --opt est déjà activé, vous n'avez pas besoin de spécifier --opt . Néanmoins, vous devrez peut-être certaines options nécessaires qui ne sont pas incluses.
Exécutez cette requête sur votre base de données
Si vous avez toutes les tables InnoDB, vous devez spécifier --single-transaction . Cela désactivera automatiquement --lock-tables et vous permettra de vider toutes les tables au même moment et de permettre de nouvelles écritures en même temps.
Si vous avez une ou plusieurs tables MyISAM, vous devez spécifier --lock-all-tables . Cela désactivera automatiquement --lock-tables , désactiver --single-transaction , verrouillera toutes les tables sur toutes les bases de données, puis créera le vidage. Les écritures dans les tables InnoDB peuvent toujours se produire, mais elles seront simplement mises en file d'attente jusqu'à ce que les verrous soient libérés. Toute connexion DB tentant d'écrire sur une table MyISAM sera suspendue jusqu'à ce que tous les verrous soient libérés.
Exécutez cette requête:
SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Si
Number_Of_Stored_Procedures
est supérieur à zéro, utilisez --routines .Exécutez cette requête:
SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Si
Number_Of_Triggers
est supérieur à zéro, utilisez --triggers .CAVEAT : veuillez ne pas utiliser --order-by-primary pour vider toutes les bases de données car cela peut potentiellement rendre les index BTREE plutôt déséquilibrés lors du rechargement. --order-by-primary ne doit être utilisé que lors du vidage d'une table individuelle dont vous savez qu'elle possède une clé primaire entière et que de nombreuses analyses de plage seront effectuées à partir de votre application.
Si vous avez besoin de types de sauvegarde mysqldump plus créatifs, consultez mon ancien article Comment puis-je optimiser un mysqldump d'une grande base de données? .
Veuillez lire toutes les options de mysqldump .
MISE À JOUR 2014-12-29 09:44 EST
En examinant votre commentaire et votre dernière modification, examinons chacune de ces options et voyons si vous en avez besoin
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
place deINSERT INTO tblname VALUES ...
. Cela pourrait gonfler le mysqldump s'il y a beaucoup de colonnes dans la définition de la table et de nombreuses lignes dans la table. Ne l'utilisez pas.DROP TABLE IF EXISTS
(qui a été ajoutée par --add-drop-table ). Ne pas l'utiliser laisse simplement seDROP TABLE IF EXISTS
produire pour chaque table. Ainsi, l'utilisation de --add-drop-database est une question de choix personnel.Ajuster votre dernière édition, c'est ce dont vous avez particulièrement besoin
Encore une fois, je dis s'il vous plaît lire toutes les options de mysqldump .
la source
--add-drop-trigger
?