¿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.