¿Cómo omitir ciertas tablas de base de datos con mysqldump?

Resuelto Zac asked hace 15 años • 12 respuestas

¿Existe alguna manera de restringir ciertas tablas desde el comando mysqldump?

Por ejemplo, usaría la siguiente sintaxis para volcar únicamente table1 y table2:

mysqldump -u username -p database table1 table2 > database.sql

¿ Pero existe una forma similar de volcar todas las tablas excepto table1 y table2? No he encontrado nada en la documentación de mysqldump, entonces, ¿la fuerza bruta (especificando todos los nombres de las tablas) es el único camino a seguir?

Zac avatar Jan 09 '09 00:01 Zac
Aceptado

Puede utilizar la opción --ignore-table . Entonces podrías hacer

mysqldump -u USERNAME -pPASSWORD DATABASE --ignore-table=DATABASE.table1 > database.sql

No hay espacios en blanco después -p(esto no es un error tipográfico).

Para ignorar varias tablas, utilice esta opción varias veces; está documentado que funciona desde al menos la versión 5.0 .

Si desea una forma alternativa de ignorar varias tablas, puede utilizar un script como este:

#!/bin/bash
PASSWORD=XXXXXX
HOST=XXXXXX
USER=XXXXXX
DATABASE=databasename
DB_FILE=dump.sql
EXCLUDED_TABLES=(
table1
table2
table3
table4
tableN   
)
 
IGNORED_TABLES_STRING=''
for TABLE in "${EXCLUDED_TABLES[@]}"
do :
   IGNORED_TABLES_STRING+=" --ignore-table=${DATABASE}.${TABLE}"
done

echo "Dump structure"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} --single-transaction --no-data --routines ${DATABASE} > ${DB_FILE}

echo "Dump content"
mysqldump --host=${HOST} --user=${USER} --password=${PASSWORD} ${DATABASE} --no-create-info --skip-triggers ${IGNORED_TABLES_STRING} >> ${DB_FILE}
Paul Sheldrake avatar Jan 08 '2009 17:01 Paul Sheldrake

Basándome en la respuesta de @ Brian-Fisher y respondiendo los comentarios de algunas de las personas en esta publicación, tengo un montón de tablas enormes (e innecesarias) en mi base de datos, por lo que quería omitir su contenido al copiar, pero mantener la estructura. :

mysqldump -h <host> -u <username> -p <database> --no-data > db.sql
mysqldump -h <host> -u <username> -p <database> --no-create-info --skip-triggers --ignore-table=schema.table1 --ignore-table=schema.table2 >> db.sql

El archivo resultante es estructuralmente sólido, pero los datos descargados ahora son ~500 MB en lugar de 9 GB, mucho mejor para mí. Ahora puedo importar el archivo a otra base de datos para realizar pruebas sin tener que preocuparme por manipular 9 GB de datos o quedarme sin espacio en el disco.

Dawngerpony avatar May 24 '2014 16:05 Dawngerpony

Otro ejemplo para ignorar varias tablas

/usr/bin/mysqldump -uUSER -pPASS --ignore-table={db_test.test1,db_test.test3} db_test> db_test.sql

usar --ignore-tabley crear una serie de tablas, con sintaxis como

--ignore-table={db_test.table1,db_test.table3,db_test.table4}

Extra:

Importar base de datos

 # if file is .sql
 mysql -uUSER  -pPASS db_test < backup_database.sql
 # if file is .sql.gz
 gzip -dc < backup_database.sql.gz | mysql -uUSER -pPASSWORD db_test

Script simple para ignorar tablas y exportar en .sql.gz para ahorrar espacio

#!/bin/bash

#tables to ignore
_TIGNORE=(
my_database.table1
my_database.table2
my_database.tablex
)

#create text for ignore tables
_TDELIMITED="$(IFS=" "; echo "${_TIGNORE[*]/#/--ignore-table=}")"

#don't forget to include user and password
/usr/bin/mysqldump -uUSER -pPASSWORD --events ${_TDELIMITED} --databases my_database | gzip -v > backup_database.sql.gz

Enlaces con información que te ayudará

  • mysqldump y gzip
  • mysqldump a un tar.gz
  • ¿Cómo cargo un archivo sql.gz en mi base de datos?

Nota: probado en servidor ubuntu con mysql Ver 14.14 Distrib 5.5.55

DarckBlezzer avatar Jun 04 '2017 04:06 DarckBlezzer

para múltiples bases de datos:

mysqldump -u user -p --ignore-table=db1.tbl1 --ignore-table=db2.tbl1 --databases db1 db2 ..
Alex avatar Sep 06 '2013 00:09 Alex