Está en la página 1de 9

8.7.

El programa de copia de seguridad de base de datos mysqldump


El cliente mysqldump puede utilizarse para volcar una base de datos o coleccin de bases de datos para copia de seguridad o para transferir datos a otro servidor SQL (no necesariamente un servidor MySQL). EL volcado contiene comandos SQL para crear la tabla y/o rellenarla. Si est haciendo una copia de seguridad del servidor, y las tablas son todas MyISAM, puede considerar usarmysqlhotcopy ya que hace copias de seguridad ms rpidas y restauraciones ms rpidas, que pueden realizarse con el segundo programa. Consulte Seccin 8.8, El programa de copias de seguridad de base de datos mysqlhotcopy. Hay tres formas de invocar mysqldump:
shell> mysqldump [opciones] nombre_de_base_de_datos [tablas] shell> mysqldump [opciones] --databases DB1 [DB2 DB3...] shell> mysqldump [opciones] --all-databases

Si no se nombra ninguna tabla o se utiliza la opcin --databases o --all-databases, se vuelca bases de datos enteras. Para obtener una lista de las opciones que soporta su versin de mysqldump, ejecute mysqldump --help. Si ejecuta mysqldump sin las opciones --quick o --opt, mysqldump carga el resultado entero en memoria antes de volcarlo. Esto puede ser un problema si est volcando una base de datos grande. En MySQL 4.0, --optest activado por defecto, pero puede desactivarse con --skip-opt. Si est utilizando una copia reciente del programa mysqldump para generar un volcado que tiene que ser cargado en un servidor MySQL muy viejo, no debe usar las opciones --opt ni e.

mysqldump soporta las siguientes opciones:


--help, -?

Muestra un mensaje de ayuda y sale.


--add-drop-table

Aade un comando DROP TABLE antes de cada comando CREATE TABLE .


--add-locks

Rodea cada volcado de tabla con los comandos LOCK TABLES y UNLOCK TABLES. Esto provoca inserciones ms rpidas cuando el fichero volcado se recarga. Consulte Seccin 7.2.14, Velocidad de la sentencia INSERT.
--all-databases, -A

Vuelca todas las tablas en todas las bases de datos. Es como utilizar la opcin -databases y nombrar todas las bases de datos en la lnea de comando. --allow-keywords

Permite la creacin de columnas con nombres que son palabras claves. Esto funciona aadiendo un prefijo a cada nombre de columna con el nombre de tabla.
--comments[={0|1}]

Si tiene como valor 0, suprime informacin adicional en el fichero de volcado como la versin del programa, la versin del servidor, y el equipo. --skip-comments tiene el mismo efecto que --comments=0. El valor por defecto es 1, que incluye la informacin extra.
--compact

Produce una salida (output) menos explcita. Esta opcin suprime comentarios y activa las opciones --skip-add-drop-table, --no-set-names, --skip-disable-keys, y -skip-add-locks . --compatible=nombre

Produce una salida que es compatible con otros sistemas de bases de datos o con servidores MySQL antiguos. El valor de name puede ser ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb,no_key_optio
ns, no_table_options, o no_field_options. Para usar varios valores, seprelos por

comas. Estos valores tienen el mismo significado que las opciones correspondientes para asignar el modo SQL del servidor. Consulte Seccin 5.3.2, El modo SQL del servidor.
--complete-insert, -c

Usa comandos INSERT compuestos que incluyen nombres de columnas.


--compress, -C

Comprime toda la informacin enviada entre el cliente y el servidor si ambos admiten compresin.
--create-options

Incluye todas las opciones de tabla especficas de MySQL en el comando CREATE TABLE.
--databases, -B

Vuelca varias bases de datos. Normalmente, mysqldump trata el primer argumento de la lnea de comandos como un nombre de base de datos y los siguientes argumentos como nombres de tablas. Con esta opcin, trata todos los argumentos como nombres de bases de datos. Los comandos CREATE DATABASE IF NOT

EXISTSnombre_de_base_de_datos y USE nombre_de_base_de_datos estn includos

en la salida (output) antes de cada nueva base de datos.


--debug[=opciones_de_depuracin], -# [opciones_de_depuracin]

Escribe un log de depuracin. La cadena de caracteres opciones_de_depuracin normalmente es'd:t:o,nombre_de_fichero'.


--default-character-set=conjunto_de_caracteres

Usa conjunto_de_caracteres como el conjunto de caracteres por defecto. Consulte Seccin 5.9.1, El conjunto de caracteres utilizado para datos y ordenacin. Si no se especifica, mysqldump desde MySQL 5.0 utiliza utf8.
--delayed-insert

Inserta registros usando comandos INSERT DELAYED. Esta opcin se elimini en MySQL 5.0.7.
--delete-master-logs

En servidores de replicacin maestros, borra los logs binarios tras realizar la operacin de volcado. En MySQL 5.0, esta opcin se activa automticamente --master-data.
--disable-keys, -K

Para cada tabla, rodea el comando INSERT con /*!40000 ALTER


TABLE tbl_name DISABLE KEYS */; y/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;. Esto hace que la carga del fichero volcado en MySQL 4.0 o posteriores sea

ms rpida porque los ndices se crean slo tras la insercin de todos los registros. Esta opcin es efectiva slo para tablas MyISAM .
--extended-insert, -e

Usa la sintaxis de INSERT de mltiples registros, que incluyen una lista de varios VALUES. Esto genera un fichero de volcado de menor tamao y acelera las inserciones cuando se recarga el fichero.
--fields-terminated-by=..., --fields-enclosed-by=..., --fieldsoptionally-enclosed-by=..., --fields-escaped-by=..., --lines-terminatedby=...

Estas opciones se usan con la opcin -T y tienen el mismo significado que las clusulas correspondientes deLOAD DATA INFILE. Consulte Seccin 13.2.5, Sintaxis de LOAD
DATA INFILE. --first-slave, -x

Obsoleto. Ahora es --lock-all-tables.


--flush-logs, -F

Vuelca los ficheros de log MySQL antes de empezar el volcado. Esta opcin necesita el permiso RELOAD. Tenga en cuenta que si utiliza esta opcin en combinacin con la opcin --all-databases (o -A) los logs se vuelcanpara cada base de datos volcada. La excepcin es cuando se usa --lock-all-tables o --master-data. En estos casos, los logs se vuelcan slo una vez, en el momento en que todas las tablas estn bloqueadas. Si quiere que el volcado de la base de datos y el del log ocurran exactamente en el mismo momento, debe usar --flush-logs junto con --lock-all-tables o --master-data.
--force, -f

Contina incluso si ocurre un error SQL durante un volcado de tabla.


--host=nombre_de_equipo, -h nombre_de_equipo

Vuelca datos de un servidor MySQL en el equipo dado. Por defecto el equipo es localhost.
--hex-blob

Vuelca columnas de cadenas de caracteres binarios usando notacin hexadecimal (por ejemplo, 'abc' es0x616263). Las columnas sobre las que tiene efecto en MySQL 5.0 son BINARY, VARBINARY, BLOB.
--lock-all-tables, -x

Bloquea todas las tablas de todas las bases de datos. Esto se consigue estableciendo un bloqueo de lectura global que dura durante todo el volcado. Esta opcin desactiva automticamente --single-transaction y --lock-tables.
--lock-tables, -l

Bloquea todas las tablas antes de comenzar el volcado. Las tablas se bloquean con READ
LOCAL para permitir inserciones concurrentes en caso de tablas MyISAM . Para tablas

transaccionales como InnoDB y BDB, --single-transaction es una opcin mucho mejor, ya que no necesita bloquear las tablas. Tenga en cuenta que al volcar mltiples bases de datos, --lock-tables bloquea tablas para cada base de datos separadamente. As, esta opcin no garantiza que las tablas en el fichero volcado sean lgicamente consistentes entre bases de datos. Tablas en bases de datos distintas pueden volcarse en estados completamente distintos.
--master-data[=valor]

Esta opcin causa que se escriba en la salida (output) la posicin y el nombre de fichero del log binario. Esta opcin necesita el permiso RELOAD y el log binario debe estar activado. Si el valor de la opcin es igual a 1, la posicin y nombre de fichero se escriben en la salida del volcado en forma de comando CHANGE MASTER que hace que un servidor esclavo

empiece desde la posicin correcta en el log binario del maestro si usa este volcado SQL del maestro para preparar un esclavo. Si el valor de la opcin es igual a 2, el comando CHANGE MASTER se escribe como un comentario SQL. sta es la accin por defecto si se omite valor . La opcin --master-data activa --lock-all-tables, a no ser que --singletransaction tambin est especificado (en tal caso, se establece un bloqueo de lectura

global slo durante un corto periodo de tiempo al principio del volcado. Consulte la descripcin de --single-transaction. En cualquier caso, cualquier accin en logs se realiza en el momento exacto del volcado. Esta opcin automticamente desactiva -lock-tables. --no-create-db, -n

Esta opcin suprime el comando CREATE DATABASE /*!32312 IF NOT EXISTS*/


db_name que se incluye de otro modo en la salida si se especifica las opciones -databases o --all-databases. --no-create-info, -t

No escribe los comandos CREATE TABLE que recrean cada tabla volcada.
--no-data, -d

No escribe ningn registro de la tabla. Esto es muy til si slo quiere obtener un volcado de la estructura de una tabla.
--opt

Esta opcin es una abreviatura; es lo mismo que especificar --add-drop-table --addlocks --create-options --disable-keys --extended-insert --lock-tables -quick --set-charset. Causa una operacin de volcado rpida y produce un fichero de

volcado que puede recargarse en un servidor MySQL rpidamente. En MySQL 5.0, -opt est activado por defecto, pero puede desactivarse con --skip-opt. Para

desactivar slo algunas de las opciones activadas por --opt, use la forma --skip; por ejemplo --skip-add-drop-table o --skip-quick.
--password[=contrasea], -p[contrasea]

La contrasea a usar al conectar con el servidor. Si usa la opcin en forma corta (p), no puede haber un espacio entre la opcin y la contrasea. Si omite el valor

de contrasea a continuacin de la opcin --password o -p en la lnea de comandos, aparece un prompt pidindola.


--port=nmero_de_puerto, -P nmero_de_puerto

El puerto TCP/IP a usar en la conexin.

--protocol={TCP | SOCKET | PIPE | MEMORY}

Protocolo de conexin a usar.


--quick, -q

Esta opcin es til para volcar tablas grandes. Fuerza mysqldump a recibir los registros de una tabla del servidor uno a uno en lugar de recibir el conjunto completo de registros y guardarlos en memoria antes de escribirlos.
--quote-names, -Q

Limita los nombres de base de datos, tablas, y columnas con caracteres '`' . Si el modo SQL del servidor incluye la opcin ANSI_QUOTES, los nombres se ponen entre caracteres '"'. En MySQL 5.0, --quote-names est activado por defecto, pero puede desactivarse con --skip-quote-names.
--result-file=fichero, -r fichero

Redirige la salida a un fichero dado. Esta opcin debe usarse en Windows, ya que previene que los caracteres de nueva lnea '\n' se conviertan en secuencias de retorno/nueva lnea '\r\n'.
--set-charset

Aade SET NAMES conjunto_de_caracteres_por_defecto a la salida (output). Esta opcin est activada por defecto. Para suprimir el comando SET NAMES, use --skip-setcharset. --single-transaction

Esta opcin realiza un comando SQL BEGIN antes de volcar los datos del servidor. Es til slo con tablas transaccionales tales como las InnoDB y BDB, ya que vuelca el estado consistente de la base de datos cuando se ejecuta BEGIN sin bloquear ninguna aplicacin. Cuando use esta opcin, debe tener en cuenta que slo las tablas InnoDB se vuelcan en un estado consistente. Por ejemplo, cualquier tabla MyISAM o HEAP volcadas mientras se usa esta opcin todava pueden cambiar de estado. La opcin --single-transaction y la opcin --lock-tables son mutuamente exclusivas, ya que LOCK TABLES provoca que cualquier transaccin pendiente se confirme implcitamente. Para volcar tablas grandes, debe combinar esta opcin con --quick.
--socket=ruta, -S ruta

El fichero socket a usar cuando se conecta con localhost (que es el equipo por defecto).
--skip-comments

Consulte la descripcin de la opcin --comments.

--tab=ruta, -T ruta

Produce ficheros con datos separados por tabuladores. Para cada tabla volcada mysqldump crea un ficheronombre_de_tabla.sql que contiene el comando CREATE TABLE que crea la tabla, y un ficheronombre_de_tabla.txt que contiene los datos. El valor de esta opcin es el directorio en el que escribir los ficheros. Por defecto, los ficheros de datos .txt se formatean usando tabuladores entre los valores de las columnas y una nueva lnea tras cada registro. El formato puede especificarse explcitamente usando las opciones --fields-xxx y --lines--xxx. Nota: Esta opcin debe usarse slo cuando mysqldump se ejecuta en la misma mquina que el servidor mysqld. Se debe tener el permiso FILE, y el servidor debe tener permisos para escribir ficheros en el directorio que se especifique.
--tables

Tiene mayor prioridad que --databases o -B. Todos los argumentos que vienen despus de esta opcin se tratan como nombres de tablas.
--user=nombre_de_usuario, -u nombre_de_usuario

Nombre de usuario MySQL a usar al conectar con el servidor.


--verbose, -v

Modo explcito. Muestra ms informacin sobre lo que hace el programa.


--version, -V

Muestra informacin de versin y sale.


--where='condicin_where', -w 'condicin_where'

Vuelca slo registros seleccionados por la condicin WHERE dada. Tenga en cuenta que las comillas alrededor de la condicin son obligatorias si contienen espacios o caracteres especiales para el intrprete de comandos. Ejemplos:
"--where=user='jimf'" "-wuserid>1" "-wuserid<1" --xml, -X

Escribe la salida del volcado como XML bien formado. Puede cambiar las siguientes variables usando las opciones -nombre_de_variable=valor: max_allowed_packet

Tamao mximo del bfer para la comunicacin cliente/servidor. En MySQL 5.0, el valor de esta variable puede ser de hasta 1GB.
net_buffer_length

Tamao inicial del bfer para la comunicacin cliente/servidor. Cuando se crean comandos de insercin de mltiples registros (como con las opciones --extended-insert o -opt), mysqldump crea registros de longitud mxima net_buffer_length. Si incrementa

esta variable, debe asegurarse tambin de que la variablenet_buffer_length en el servidor MySQL tenga como mnimo esta longitud. Tambin es posible cambiar variables usando la sintaxis --setvariable=nombre_de_variable=valor o -Onombre_de_variable=valor. Sin embargo,

esta sintaxis est obsoleta. El uso ms comn de mysqldump es para hacer una copia de seguridad de toda la base de datos:
shell> mysqldump --opt nombre_de_base_de_datos > fichero_de_seguridad.sql

El siguiente ejemplo muestra cmo volcar el fichero de seguridad de nuevo en el servidor:


shell> mysql nombre_de_base_de_datos < fichero_de_seguridad.sql

El siguiente ejemplo obtiene el mismo resultado que el anterior:


shell> mysql -e "source /ruta/fichero_de_seguridad.sql"
nombre_de_base_de_datos

mysqldump es muy til para poblar bases de datos copiando los datos de un servidor MySQL a otro:
shell> mysqldump --opt nombre_de_base_de_datos | mysql -host=nombre_de_equipo_remoto -C nombre_de_base_de_datos

Es posible volcar varias bases de datos con un solo comando:


shell> mysqldump --databases nombre_de_base_de_datos_1 [nombre_de_base_de_datos_2 ...] > mis_bases_de_datos.sql

Si quiere volcar todas las bases de datos, use la opcin --all-databases:


shell> mysqldump --all-databases > todas_las_bases_de_datos.sql

Si las tablas se guardan con el motor de almacenamiento InnoDB, mysqldump proporciona una forma de realizar una copia de seguridad de las mismas (consulte los comandos a continuacin). Esta copia de seguridad slo necesita un bloqueo local de todas las tablas (usando FLUSH TABLES WITH READ LOCK) al principio del volcado. En cuanto obtiene el bloqueo, se lee el log binario y se libera el bloqueo. Si y slo si un comando de actualizacin largo est en ejecucin cuando se ejecuta FLUSH..., el servidor MySQL puede quedar

bloqueado hasta que acabe este comando largo, y luego el volcado queda sin ningn bloqueo. Si el servidor MySQL recibe slo comandos de actualizacin cortos (en el sentido de "poco tiempo de ejecucin"), incluso si son muchos, el periodo inicial de bloqueo no debe ser un problema.
shell> mysqldump --all-databases --single-transaction > todas_las_bases_de_datos.sql

Para una recuperacin en un momento dado (tambin comocido como "roll-forward", cuando necesita restaurar una copia de seguridad antigua y recrear los cambios que han ocurrido desde tal copia de seguridad), es til rotar el log binario (consulte Seccin 5.10.3, El registro binario (Binary Log)) o al menos conozca las coordinadas del log binario que se corresponden con el volcado:
shell> mysqldump --all-databases --master-data=2 > todas_las_bases_de_datos.sql or shell> mysqldump --all-databases --flush-logs --master-data=2 > todas_las_bases_de_datos.sql

El uso simultneo de --master-data y --single-transaction proporciona una forma de hacer copias de seguridad en lnea apropiadas para recuperaciones en un momento dado, si las tablas se guardan con el motor de almacenamiento InnoDB.