¿Cómo puedo volcar una tabla específica o un conjunto de tablas sin incluir el resto de las tablas db?
¿Cómo puedo volcar una tabla específica o un conjunto de tablas sin incluir el resto de las tablas db?
Respuestas:
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 !!!
@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.
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.).
--ignore-table
argumento? Y si es así, ¿no sería mejor eliminar el guión de la respuesta y recomendarlo --ignore-table
?
Illegal use of option --ignore-table=<database>.<table>
menos que especifique la tabla como schemaname.tablename
.
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-table
opción:
mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql
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.
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