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.
Concernant 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 non disponible 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, j'aimerais savoir comment m'informer quand la commande va mal et si oui lever une exception.
Des idées?
MODIFIER
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
Vous allez trouver cela choquant, mais vous n'avez besoin que d'une option majeure: - opt
Qu'est-ce que - opt ?
Cette option, activée par défaut, est un raccourci pour la combinaison de - add-drop-table- add-locks- create-options = - touches de désactivation- insert-étend- tables de verrouillage- rapide--set-charset . Il donne une opération de vidage rapide et produit un fichier de vidage qui peut être rechargé rapidement sur un serveur MySQL.
Parce que - l'option opt est activée par défaut, vous ne spécifiez que son inverse, l'option --skip-opt pour désactiver plusieurs paramètres par défaut. Voir la discussion sur les groupes d'options mysqldump pour plus d'informations sur l'activation ou la désactivation sélective d'un sous-ensemble des options affectées par --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
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
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 point dans le temps et de permettre aux nouvelles écritures de venir 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ésactivera - 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 .
[~ # ~] mise en garde [~ # ~] : veuillez ne pas utiliser - order-by-primary pour le dumping 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 comportera de nombreuses analyses de plage à 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 .
J'ai mis à jour ma commande mysqldump (veuillez consulter ma modification). J'ai une dernière question cependant. Pensez-vous que cela vaut également la peine d'utiliser tous les arguments suivants? --add-drop-database\--add-drop-table\--complete-insert\--delayed-insert\--tz-utc
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 ...
au lieu de INSERT 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é par - - add-drop-table ) allez plus vite. Ne pas l'utiliser laisse simplement DROP TABLE IF EXISTS
Se 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
mysqldump\
--Host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Encore une fois, je dis s'il vous plaît lisez toutes les options pour mysqldump .