MySQL


Enlaces, documentación


Comandos

mysqldump

mysqldump official documentation (5.7)

Para hacer un dump de una base de datos:

$ mysqldump -u root -p database > dump.sql

Para hacer un dump de varias tablas una base de datos:

$ mysqldump -u root -p database table1 table2 ... > dump.sql

Para restaurar un dump:

$ mysql -u root -p < dump.sql

Opciones del comando mysqldump:

# Para hacer un dump de varias bases de datos a la vez:
$ mysqldump -u root -p --databases database1 database2 ... > dump.sql
# Para hacer un dump de todas las bases de datos (incluida la base de datos mysql):
$ mysqldump -u root -p --all-databases --flush-privileges > dump.sql
# Comando para hacer un dump completo de un servidor mysql
$ mysqldump -u root -p --all-databases --flush-privileges --routines > dump.sql
# Para volcar la estructura de las bases de datos pero sin copiar los datos se usa --no-data, -d
$ mysqldump -u root -p --no-data ... > dump.sql
# Si se quiere añadir al dump una orden `DROP DATABASE ...` antes de las ordenes `CREATE DATABASE`:
$ mysqldump -u root -p --add-drop-database ... > dump.sql
# Para volcar únicamente los datos se usa --no-create-info, -t
$ mysqldump -u root -p --no-create-info --skip-triggers --compact ... > mydb_data.sql

La opción --flush-privileges es necesaria siempre que se incluya la base de datos mysql en la lista de bases de datos de las que se va a hacer el dump.

Cuando se quieren volcar únicamente los datos (generar únicamente INSERTS) es necesario añadir también la opción --skip-triggers para que no se incluyan en el volcado órdenes de creación de triggers, si los hubiese en la base de datos.

La opción --compact no genera comentarios en el archivo dump, generando un dump de menor tamaño, útil cuando se están volcando únicamente los datos.

La opción --single-transaction asegura un snapshot consistente entre todas las tablas porque todo el dump se realiza en una única transacción. Esta opción funciona únicamente con el storage engine InnoDB (el habitual). El comando para hacer un dump completo de un servidor asegurando consistencia sería:

$ mysqldump -u root -p --all-databases --flush-privileges --routines --single-transaction > dump.sql

Todos los comandos mysqldump que redirigen la salida estándar a un archivo podrían tener problemas con los conjuntos de caracteres en algunas bases de datos. Si se produce este problema, sustituir la redirección por la opción -r:

$ mysqldump -u root -p database -r dump.sql

Para hacer el restore sin ningún problema de conjuntos de caracteres (si es necesario, sustituir 'utf8' por el conjunto de caracteres que corresponda):

$ mysql -u root -p --default-character-set=utf8
mysql> set names 'utf8';
mysql> source backup.sql;

Para comprimir el archivo dump, enviar la salida de mysqldump a un compresor, por ejemplo:

# Comprimir un dump
$ mysqldump -u [user] -p[password]--single-transaction --quick --all-databases | gzip > alldb.sql.gz
# Restaurar un dump comprimido
$ gunzip < alldb.sql.gz | mysql -u [user] -p[password]