Obtener el dump de una base de datos MySQL

Ya sea para mover el contenido de una base de datos de un lugar a otro como para generar un respaldo de la misma, es necesario obtener un dump que contenga tanto la estructura como los datos.

Para ello, desde la línea de comandos (recuerden que pueden agregar la ruta del ejecutable mysqldump a la variable Path en Windows):

mysqldump -u <USUARIO> -p [<OPCIONES>] <NOMBRE_DB> > dump.sql

a continuación se nos solicitará la clave de dicho usuario:

Enter password: ********

De esa manera obtendremos el conjunto de sentencias SQL que permitirán a futuro la restitución del contenido mediante la importación del dump a una base de datos Mysql

Opciones

Las opciones que se utilizan por defecto más importantes se detallan a continuación. Les recomiendo que cuando indiquen omitir una característica lo recomendable es agregar la opción al final de la lista para asegurarse que se aplica y no es revertida por otra opción que se indique después.

--comments, -i

Registrar información adicional como la versión del programa, el servidor y el host.

Omitir con --skip-comments.

--set-charset

Agrega la sentencia SET NAMES <default_charset>.

Omitir con --skip-set-charset.

--quote-names, -Q

Poner entre comillas los identificadores (nombres) entre backticks (`) o comillas dobles («).

Omitir con --skip-quote-names.

--tz-utc

Permite que los campos TIMESTAMP se guarden y recuperen entre servidores con diferentes zonas horarias, estableciendo el timezone de la conexión a UTC y agregando la sentencia SET TIME_ZONE=’+00:00′ al dump. De lo contrario, se usarían las zonas horarias del servidor origen y destino en cada operación, lo que modificaría los valores si fueran distintas.

Omitir con --skip-tz-utc.

--triggers

Incluye los triggers. Tener cuidado si se restituye en un servidor que no soporta múltiples triggers por evento, cuando se hayan dado el caso al generar el dump.

Omitir con --skip-triggers

--opt

Es la combinación de las siguientes opciones:

--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset

Omitir con --skip-opt.

--add-drop-table

Agrega la sentencia DROP TABLE antes de cada sentencia CREATE TABLE.

--add-locks

Encierra el dump de cada tabla entre sentencias LOCK TABLES y UNLOCK TABLES

+ La restitución es más rápida.

--create-options

Incluye las opciones de tabla específicas de Mysql en las sentencias CREATE TABLE. (No pude encontrar precisamente cuáles son)

--disable-keys, -K

Encierra las sentencias INSERT de cada taba con sentencias /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; y /*!40000 ALTER TABLE tbl_name ENABLE KEYS */;

+ Acelera la importación dado que los índices se crean luego de que todas las filas se insertan (solo para índices que no sean UNIQUE de tablas MyISAM).

--extended-insert, -e

Utiliza BULK INSERT (una sentencia con múltiples listas en VALUES) en lugar de una sentencia INSERT por cada registro.

+ El dump es más chico y las inserciones se hacen más rápido (considerar el valor de la variable max_allowed_packet)

--quick, -q

Fuerza a que obtengan de a una las filas de cada tabla en lugar de traelas todas juntas y procesarlas en memoria, antes de escribir el dump.

+ Útil para las bases de datos grandes

--lock-tables, -l

Bloquea todas las tablas de cada base de datos a la vez antes de hacer el dump. Utiliza un READ LOCAL para permitir inserciones concurrentes en tablas MyISAM. Para tablas transaccionales como InnoDB es mejor usar --single-transaction ya que no requiere bloquear las tablas.

Omitir con --skip-lock-tables.

Importar dump a base MySQL desde línea de comandos

Desde la línea de comandos, se puede importar un dump hacia una base de datos de la siguiente manera:

mysql -u USUARIO -p NOMBRE_DB < dump.sql

a continuación se nos solicitará la clave de dicho usuario:

Enter password: ********

Si el proceso se realizó correctamente veremos nuevamente el prompt.

Recuerden que pueden agregar la ruta del ejecutable mysql a la variable Path en Windows para no tener que escribirla cada vez que lo usemos.