web-dev-qa-db-fra.com

mysqldump avec plusieurs tables avec ou sans clause where

J'ai un ensemble de tables dans ma base de données que je dois prendre un dump (: D) de. Mon problème est que je veux prendre des données de certaines tables qui ne datent que de certains jours et que je voudrais garder les tables restantes intactes.

La question que j'ai trouvée était quelque chose comme:

mysqldump -h<hostname> -u<username> -p <databasename> 
<table1> <table2> <table3> 
<table4> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)',
<table5> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)
--single-transaction --no-create-info | gzip
> $(date +%Y-%m-%d-%H)-dump.sql.gz

Le problème avec le code ci-dessus est que table1, table2 et table3 essaieront de prendre la clause where de table4. Je ne veux pas cette cause qui cracherait une erreur que le champ créé n'existe pas dans ces tables.

J'ai essayé de mettre la virgule (,) après les noms de table comme après la clause where, mais cela ne fonctionne pas.

À ce stade, je suis à peu près bloqué et je n'ai plus d'autre choix que de créer deux fichiers de vidage SQL différents, ce que je ne voudrais pas faire.

8
Sworup Shakya

faites deux dumps ou si vous ne voulez pas en faire deux, essayez deux commandes.

 mysqldump -h<hostname> -u<username> -p <databasename>  <table1>
<table2> <table3> 
--single-transaction --no-create-info > dumpfile.sql

b.

mysqldump -h<hostname> -u<username> -p <databasename> 
<table4> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)',
<table5> --where 'created > DATE_SUB(now(), INTERVAL 7 DAY)
--single-transaction --no-create-info >> dumpfile.sql

c. gzip dumpfile.sql

19
Sandeep Maharjan

La solution ci-dessus ne fonctionnera donc que si les tables ont un champ de clé étrangère commun.

Si vous regardez mon exemple ci-dessous, les user_addresses, user_groups, et user_payment_methods ont tous le champ user_id i commun. Lorsque mysqldump exécute la clause where, il filtrera ces tables.

mysqldump -u <username> -p <password> 
user_addresses user_groups user_payment_methods 
-w "user_id 
in (select id from users where email like '%@domain.com')"
--single-transaction| gzip > sqldump.sql.gz
0
James