¿Cómo mysqldump tablas específicas?


Respuestas:


540

Si está volcando las tablas t1, t2 y t3 de mydb

mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql

Si tiene un montón de tablas en mydb y desea volcar todo excepto t1, t2 y t3, haga lo siguiente:

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

Darle una oportunidad !!!

ACTUALIZACIÓN 2014-03-06 10:15 EST

@RoryDonohue me señaló que la función GROUP_CONCAT necesita tener su longitud máxima extendida. Agregué la variable de sesión group_concat_max_len a mi respuesta con una longitud máxima de 10K. Gracias, @RoryDonohue.


43
Para excluir solo algunas tablas, puede usar --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 etc.
codewaggle

@codecowboy, puedes cambiar SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"a SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". Lo acabo de probar y funciona. Puede cambiar la condición a '% foo%' para obtener todas las tablas que contengan 'foo' en cualquier lugar de sus nombres (incluyendo 'comida', 'tonto', etc.).
Buttle Butkus

1
¿No es el enfoque para excluir tablas aquí redundante y excesivo dada la existencia del --ignore-tableargumento? Y si es así, ¿no sería mejor eliminar el guión de la respuesta y recomendarlo --ignore-table?
Mark Amery

@codewaggle Eso da el error a Illegal use of option --ignore-table=<database>.<table>menos que especifique la tabla como schemaname.tablename.
WAF

cosas interesantes, ¿alguna razón por la que la variable SQL no es de varias líneas?
sdkks

72

Una nota para ampliar la respuesta de RolandoMySQLDBA .

El guión que incluyó es un gran enfoque para incluir ( and table_name in) o excluir ( and table_name NOT in) una lista de tablas.

Si solo necesita excluir una o dos tablas, puede excluirlas individualmente con la --ignore-tableopción:

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql

29

Cuando tiene más de unas pocas tablas, es mucho mejor ejecutar algo como esto:

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]

O algo así:

mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';" 
       | mysql -u[user] -p[password] databasename 
       | sed '/Tables_in/d'` > [target_file]

Recuerde que esos comandos deben escribirse solo en una línea.


11

Puedes hacerlo simplemente usando el siguiente comando:

mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql

44
--ignore-table es excluir ciertas tablas de mysqldump, no incluirlas. :)
Praveen Prasannan

3
Sin embargo, uno podría enumerar todas las tablas para excluir y volcaría solo las restantes :-)
Colin 't Hart
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.