Comment puis-je vider une table spécifique ou un ensemble de tables sans inclure le reste des tables db?
Si vous videz les tables t1, t2 et t3 de mydb
mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql
Si vous avez une tonne de tables dans mydb et que vous souhaitez tout vider sauf t1, t2 et t3, procédez comme suit:
DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql
Essaie !!!
@ RoryDonohue m'a fait remarquer que la fonction GROUP_CONCAT doit avoir sa longueur maximale étendue. J'ai ajouté la variable de session group_concat_max_len à ma réponse avec une longueur max de 10K. Merci, @RoryDonohue.
Une note à développer la réponse de RolandoMySQLDBA .
Le script qu'il a inclus est une excellente approche pour inclure (and table_name in
) ou à l'exclusion (and table_name NOT in
) une liste de tableaux.
Si vous avez juste besoin d'exclure une ou deux tables, vous pouvez les exclure individuellement avec le --ignore-table
option:
mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
Lorsque vous avez plus de quelques tables, il est préférable d'exécuter quelque chose comme ceci:
mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"'
| grep -v Tables_in
| xargs mysqldump [databasename] -u [root] -p [password] > [target_file]
Ou quelque chose comme ça:
mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';"
| mysql -u[user] -p[password] databasename
| sed '/Tables_in/d'` > [target_file]
N'oubliez pas que ces commandes doivent être tapées sur une seule ligne.
Vous pouvez le faire simplement en utilisant la commande ci-dessous:
mysqldump -uusername -ppassword dbname \
--ignore-table=schema.tablename1 \
--ignore-table=schema.tablename2 \
--ignore-table=schema.tablename3 > mysqldump.sql