El cliente mysqldump puede utilizarse para volcar una base de datos o colección 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 usar
mysqlhotcopy ya que hace copias de seguridad
más rápidas y restauraciones más rápidas, que pueden
realizarse con el segundo programa. Consulte
Sección 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] --databasesDB1[DB2DB3...] shell> mysqldump [opciones] --all-databases
Si no se nombra ninguna tabla o se utiliza la opción
--databases o --all-databases,
se vuelca bases de datos enteras.
Para obtener una lista de las opciones que soporta su versión 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, --opt
está 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 error y sale.
-
--add-drop-tableAñade un comando
DROP TABLEantes de cada comandoCREATE TABLE. -
--add-locksRodea cada volcado de tabla con los comandos
LOCK TABLESyUNLOCK TABLES. Esto provoca inserciones más rápidas cuando el fichero volcado se recarga. Consulte Sección 7.2.14, “Velocidad de la sentenciaINSERT”. -
--all-databases,-AVuelca todas las tablas en todas las bases de datos. Es como utilizar la opción
--databasesy nombrar todas las bases de datos en la línea de comando. -
--allow-keywordsPermite la creación de columnas con nombres que son palabras claves. Esto funciona añadiendo un prefijo a cada nombre de columna con el nombre de tabla.
-
--comments[={0|1}]Si tiene como valor
0, suprime información adicional en el fichero de volcado como la versión del programa, la versión del servidor, y el equipo.--skip-commentstiene el mismo efecto que--comments=0. El valor por defecto es1, que incluye la información extra. -
--compactProduce una salida (output) menos explícita. Esta opción suprime comentarios y activa las opciones
--skip-add-drop-table,--no-set-names,--skip-disable-keys, y--skip-add-locks. -
--compatible=nombreProduce una salida que es compatible con otros sistemas de bases de datos o con servidores MySQL antiguos. El valor de
namepuede seransi,mysql323,mysql40,postgresql,oracle,mssql,db2,maxdb,no_key_options,no_table_options, ono_field_options. Para usar varios valores, sepárelos por comas. Estos valores tienen el mismo significado que las opciones correspondientes para asignar el modo SQL del servidor. Consulte Sección 5.3.2, “El modo SQL del servidor”. -
--complete-insert,-cUsa comandos
INSERTcompuestos que incluyen nombres de columnas. -
--compress,-CComprime toda la información enviada entre el cliente y el servidor si ambos admiten compresión.
-
--create-optionsIncluye todas las opciones de tabla específicas de MySQL en el comando
CREATE TABLE. -
--databases,-BVuelca varias bases de datos. Normalmente, mysqldump trata el primer argumento de la línea de comandos como un nombre de base de datos y los siguientes argumentos como nombres de tablas. Con esta opción, trata todos los argumentos como nombres de bases de datos. Los comandos
CREATE DATABASE IF NOT EXISTSnombre_de_base_de_datosyUSEnombre_de_base_de_datosestán incluídos en la salida (output) antes de cada nueva base de datos. -
--debug[=opciones_de_depuración],-# [opciones_de_depuración]Escribe un log de depuración. La cadena de caracteres
opciones_de_depuraciónnormalmente es'd:t:o,nombre_de_fichero'. -
--default-character-set=conjunto_de_caracteresUsa
conjunto_de_caracterescomo el conjunto de caracteres por defecto. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”. Si no se especifica, mysqldump desde MySQL 5.0 utilizautf8. -
--delayed-insertInserta registros usando comandos
INSERT DELAYED. Esta opción se eliminió en MySQL 5.0.7. -
--delete-master-logsEn servidores de replicación maestros, borra los logs binarios tras realizar la operación de volcado. En MySQL 5.0, esta opción se activa automáticamente
--master-data. -
--disable-keys,-KPara cada tabla, rodea el comando
INSERTcon/*!40000 ALTER TABLEtbl_nameDISABLE KEYS */; y/*!40000 ALTER TABLEtbl_nameENABLE KEYS */;. Esto hace que la carga del fichero volcado en MySQL 4.0 o posteriores sea más rápida porque los índices se crean sólo tras la inserción de todos los registros. Esta opción es efectiva sólo para tablasMyISAM. -
--extended-insert,-eUsa la sintaxis de
INSERTde múltiples registros, que incluyen una lista de variosVALUES. Esto genera un fichero de volcado de menor tamaño y acelera las inserciones cuando se recarga el fichero. -
--fields-terminated-by=...,--fields-enclosed-by=...,--fields-optionally-enclosed-by=...,--fields-escaped-by=...,--lines-terminated-by=...Estas opciones se usan con la opción
-Ty tienen el mismo significado que las cláusulas correspondientes deLOAD DATA INFILE. Consulte Sección 13.2.5, “Sintaxis deLOAD DATA INFILE”. -
--first-slave,-xObsoleto. Ahora es
--lock-all-tables. -
--flush-logs,-FVuelca los ficheros de log MySQL antes de empezar el volcado. Esta opción necesita el permiso
RELOAD. Tenga en cuenta que si utiliza esta opción en combinación con la opción--all-databases(o-A) los logs se vuelcan para cada base de datos volcada. La excepción es cuando se usa--lock-all-tableso--master-data. En estos casos, los logs se vuelcan sólo una vez, en el momento en que todas las tablas están bloqueadas. Si quiere que el volcado de la base de datos y el del log ocurran exactamente en el mismo momento, debe usar--flush-logsjunto con--lock-all-tableso--master-data. -
--force,-fContinúa incluso si ocurre un error SQL durante un volcado de tabla.
-
--host=nombre_de_equipo,-hnombre_de_equipoVuelca datos de un servidor MySQL en el equipo dado. Por defecto el equipo es
localhost. -
--hex-blobVuelca columnas de cadenas de caracteres binarios usando notación hexadecimal (por ejemplo,
'abc'es0x616263). Las columnas sobre las que tiene efecto en MySQL 5.0 sonBINARY,VARBINARY,BLOB. -
--lock-all-tables,-xBloquea 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 opción desactiva automáticamente
--single-transactiony--lock-tables. -
--lock-tables,-lBloquea todas las tablas antes de comenzar el volcado. Las tablas se bloquean con
READ LOCALpara permitir inserciones concurrentes en caso de tablasMyISAM. Para tablas transaccionales comoInnoDByBDB,--single-transactiones una opción mucho mejor, ya que no necesita bloquear las tablas.Tenga en cuenta que al volcar múltiples bases de datos,
--lock-tablesbloquea tablas para cada base de datos separadamente. Así, esta opción no garantiza que las tablas en el fichero volcado sean lógicamente consistentes entre bases de datos. Tablas en bases de datos distintas pueden volcarse en estados completamente distintos. -
--master-data[=valor]Esta opción causa que se escriba en la salida (output) la posición y el nombre de fichero del log binario. Esta opción necesita el permiso
RELOADy el log binario debe estar activado. Si el valor de la opción es igual a 1, la posición y nombre de fichero se escriben en la salida del volcado en forma de comandoCHANGE MASTERque hace que un servidor esclavo empiece desde la posición correcta en el log binario del maestro si usa este volcado SQL del maestro para preparar un esclavo. Si el valor de la opción es igual a 2, el comandoCHANGE MASTERse escribe como un comentario SQL. Ésta es la acción por defecto si se omitevalor.La opción
--master-dataactiva--lock-all-tables, a no ser que--single-transactiontambién esté especificado (en tal caso, se establece un bloqueo de lectura global sólo durante un corto periodo de tiempo al principio del volcado. Consulte la descripción de--single-transaction. En cualquier caso, cualquier acción en logs se realiza en el momento exacto del volcado. Esta opción automáticamente desactiva--lock-tables. -
--no-create-db,-nEsta opción suprime el comando
CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_nameque se incluye de otro modo en la salida si se especifica las opciones--databaseso--all-databases. -
--no-create-info,-tNo escribe los comandos
CREATE TABLEque recrean cada tabla volcada. -
--no-data,-dNo escribe ningún registro de la tabla. Esto es muy útil si sólo quiere obtener un volcado de la estructura de una tabla.
-
--optEsta opción es una abreviatura; es lo mismo que especificar
--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset. Causa una operación de volcado rápida y produce un fichero de volcado que puede recargarse en un servidor MySQL rápidamente. En MySQL 5.0,--optestá activado por defecto, pero puede desactivarse con--skip-opt. Para desactivar sólo algunas de las opciones activadas por--opt, use la forma--skip; por ejemplo--skip-add-drop-tableo--skip-quick. -
--password[=contraseña],-p[contraseña]La contraseña a usar al conectar con el servidor. Si usa la opción en forma corta (
-p), no puede haber un espacio entre la opción y la contraseña. Si omite el valor decontraseñaa continuación de la opción--passwordo-pen la línea de comandos, aparece un prompt pidiéndola. -
--port=número_de_puerto,-Pnúmero_de_puertoEl puerto TCP/IP a usar en la conexión.
-
--protocol={TCP | SOCKET | PIPE | MEMORY}Protocolo de conexión a usar.
-
--quick,-qEsta opción 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,-QLimita los nombres de base de datos, tablas, y columnas con caracteres '
`' . Si el modo SQL del servidor incluye la opciónANSI_QUOTES, los nombres se ponen entre caracteres '"'. En MySQL 5.0,--quote-namesestá activado por defecto, pero puede desactivarse con--skip-quote-names. -
--result-file=fichero,-rficheroRedirige la salida a un fichero dado. Esta opción debe usarse en Windows, ya que previene que los caracteres de nueva línea '
\n' se conviertan en secuencias de retorno/nueva línea '\r\n'. -
--set-charsetAñade
SET NAMESconjunto_de_caracteres_por_defectoa la salida (output). Esta opción está activada por defecto. Para suprimir el comandoSET NAMES, use--skip-set-charset. -
--single-transactionEsta opción realiza un comando SQL
BEGINantes de volcar los datos del servidor. Es útil sólo con tablas transaccionales tales como lasInnoDByBDB, ya que vuelca el estado consistente de la base de datos cuando se ejecutaBEGINsin bloquear ninguna aplicación.Cuando use esta opción, debe tener en cuenta que sólo las tablas
InnoDBse vuelcan en un estado consistente. Por ejemplo, cualquier tablaMyISAMoHEAPvolcadas mientras se usa esta opción todavía pueden cambiar de estado.La opción
--single-transactiony la opción--lock-tablesson mutuamente exclusivas, ya queLOCK TABLESprovoca que cualquier transacción pendiente se confirme implícitamente.Para volcar tablas grandes, debe combinar esta opción con
--quick. -
--socket=ruta,-SrutaEl fichero socket a usar cuando se conecta con
localhost(que es el equipo por defecto). -
--skip-commentsConsulte la descripción de la opción
--comments. -
--tab=ruta,-TrutaProduce ficheros con datos separados por tabuladores. Para cada tabla volcada mysqldump crea un fichero
nombre_de_tabla.sql que contiene el comandoCREATE TABLEque crea la tabla, y un ficheronombre_de_tabla.txt que contiene los datos. El valor de esta opción es el directorio en el que escribir los ficheros.Por defecto, los ficheros de datos
.txtse formatean usando tabuladores entre los valores de las columnas y una nueva línea tras cada registro. El formato puede especificarse explícitamente usando las opciones--fields-xxxy--lines--xxx.Nota: Esta opción debe usarse sólo cuando mysqldump se ejecuta en la misma máquina 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. -
--tablesTiene mayor prioridad que
--databaseso-B. Todos los argumentos que vienen después de esta opción se tratan como nombres de tablas. -
--user=nombre_de_usuario,-unombre_de_usuarioNombre de usuario MySQL a usar al conectar con el servidor.
-
--verbose,-vModo explícito. Muestra más información sobre lo que hace el programa.
-
--version,-VMuestra información de versión y sale.
-
--where='condición_where',-w 'condición_where'Vuelca sólo registros seleccionados por la condición
WHEREdada. Tenga en cuenta que las comillas alrededor de la condición son obligatorias si contienen espacios o caracteres especiales para el intérprete de comandos.Ejemplos:
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
-
--xml,-XEscribe la salida del volcado como XML bien formado.
Puede cambiar las siguientes variables usando las opciones
--nombre_de_variable=valor:
-
max_allowed_packetTamaño máximo del búfer para la comunicación cliente/servidor. En MySQL 5.0, el valor de esta variable puede ser de hasta 1GB.
-
net_buffer_lengthTamaño inicial del búfer para la comunicación cliente/servidor. Cuando se crean comandos de inserción de múltiples registros (como con las opciones
--extended-inserto--opt), mysqldump crea registros de longitud máximanet_buffer_length. Si incrementa esta variable, debe asegurarse también de que la variablenet_buffer_lengthen el servidor MySQL tenga como mínimo esta longitud.
También es posible cambiar variables usando la sintaxis
--set-variable=nombre_de_variable=valor
o -O
nombre_de_variable=valor.
Sin embargo, esta sintaxis está obsoleta.
El uso más común de mysqldump es para hacer una copia de seguridad de toda la base de datos:
shell> mysqldump --optnombre_de_base_de_datos>fichero_de_seguridad.sql
El siguiente ejemplo muestra cómo volcar el fichero de seguridad de nuevo en el servidor:
shell> mysqlnombre_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 --optnombre_de_base_de_datos| mysql --host=nombre_de_equipo_remoto-Cnombre_de_base_de_datos
Es posible volcar varias bases de datos con un solo comando:
shell> mysqldump --databasesnombre_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 opción
--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 continuación). Esta copia de
seguridad sólo 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 sólo si un comando de
actualización largo está en ejecución cuando se ejecuta
FLUSH..., el servidor MySQL puede quedar
bloqueado hasta que acabe este comando largo, y luego el volcado
queda sin ningún bloqueo. Si el servidor MySQL recibe sólo
comandos de actualización cortos (en el sentido de "poco tiempo
de ejecución"), 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 recuperación en un momento dado (también 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 Sección 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 simultáneo de --master-data y
--single-transaction proporciona una forma de
hacer copias de seguridad en línea apropiadas para recuperaciones
en un momento dado, si las tablas se guardan con el motor de
almacenamiento InnoDB.
Para más información sobre copias de seguridad, consulte Sección 5.8.1, “Copias de seguridad de bases de datos”.