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 --disable-keys --extended-insert --lock-tables --quick - 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.
Étant donné que l' option - -opt est activée par défaut , vous spécifiez uniquement son contraire, 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 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
J'ai mis à jour ma commande mysqldump (veuillez voir ma modification). J'ai une dernière question cependant. Pensez-vous qu'il serait utile d'utiliser également 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
- --opt : J'ai déjà dit que vous n'avez pas besoin de le spécifier car il est activé par défaut.
- --delayed-insert : Je reste fermement à l'écart de cela avec une base de données entièrement InnoDB. En fait, je reste fermement à l'écart de cette PÉRIODE !!! . Depuis 1) il est possible que INSERT DELAYED puisse perdre des données, 2) il est converti en INSERT pour les esclaves de réplication MySQL, 3) il existe un rapport de bogue ouvert à propos de son utilisation avec des déclencheurs de retour dans MySQL 5.6 et n'est pas considéré comme un bogue , 4 ) il est obsolète dans MySQL 5.6, et 5) Morgan Tocker (bien connu MySQL Guru) a prévu sa dépréciation en 2012 , vous devez oublier que cette option n'a jamais existé. Ne l'utilisez jamais, jamais (à l'infini) !!!
- --complete-insert : Ceci utilisera à la
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
place 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.
- --add-drop-table : Puisque --opt le permet pour vous, vous n'avez pas besoin de le spécifier.
- --add-drop-database : Si vous supprimez --add-drop-database , cela accélère simplement la
DROP TABLE IF EXISTS
(qui a été ajoutée par --add-drop-table ). Ne pas l'utiliser laisse simplement se DROP TABLE IF EXISTS
produire pour chaque table. Ainsi, l'utilisation de --add-drop-database est une question de choix personnel.
- --tz-utc : Si vous prévoyez de restaurer des données sur le même serveur à partir duquel vous sauvegardez, vous n'avez pas besoin de --tz-utc . Si vous restaurez les données vers un autre centre de données dans un fuseau horaire différent et ...
- si vous souhaitez conserver le même fuseau horaire que celui de la sauvegarde, vous n'avez pas besoin de --tz-utc .
- si vous voulez que les données utilisent le fuseau horaire d'un nouveau centre de données, vous avez besoin de --tz-utc .
- EXEMPLE: Supposons que vous sauvegardiez une base de données à New York. C'est EST. Si vous avez un autre centre de données à Seattle, ce serait PST. Si vous souhaitez que la sauvegarde de New York soit restaurée à Seattle et que les horodatages de la base de données représentent toujours New York, vous ne voulez pas utiliser --tz-utc .
- --default-character-set
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 lire toutes les options de mysqldump .