You are on page 1of 27

Cmo hacer copias de seguridad de una base de datos MySQL

El mtodo ms utilizado para crear copias de seguridad de MySQL se basa en el uso del comando
mysqldump. Este comando se incluye dentro de las utilidades del propio servidor MySQL, por lo que ya se
instal cuando instalaste MySQL. Para comprobar que dispones de mysqldump, abre una consola de
comandos y ejecuta lo siguiente:

$ mysqldump # para comprobar la versin instalada$ mysqldump --versionmysqldump


Ver 10.XX Distrib 5.X.XX

Si se produce un error de tipo "command not found", es posible que no hayas instalado MySQL
correctamente o que tengas que indicar la ruta completa hasta donde se encuentre el comando, como por
ejemplo:

$ /usr/local/mysql/bin/mysqldump

Copia de seguridad bsica


Ejecuta el siguiente comando para realizar una copia de seguridad completa de la base de datos llamada
NOMBRE_BASE_DE_DATOS. No olvides reemplazar TU_USUARIO y TU_CONTRASEA por las credenciales
que utilizas para acceder al servidor de base de datos:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA NOMBRE_BASE_DE_DATOS >


copia_seguridad.sql
Si por ejemplo el usuario es root, la contrasea tambin es root y la base de datos se llama acme, el
comando que debes ejecutar es el siguiente:

$ mysqldump --user=root --password=root acme > copia_seguridad.sql

Si por motivos de seguridad no quieres escribir la contrasea como parte del comando, puedes reemplazar
la opcin --password=XX por -p. Al hacerlo, MySQL te pedir que escribas la contrasea a mano cada vez
que realices una copia de seguridad:

$ mysqldump --user=root -p acme > copia_seguridad.sqlEnter password: *********

Recuperando una copia de seguridad


Las copias de seguridad slo son tiles si se pueden recuperar fcilmente los datos cuando se produce un
error. Suponiendo que los datos a recuperar se encuentran en el archivo copia_seguridad.sql, el
comando que debes ejecutar para recuperar la informacin de la base de datos es el siguiente:

$ mysql --user=TU_USUARIO --password=TU_CONTRASEA < copia_seguridad.sql

Observa cmo en este caso se ejecuta el comando mysql y no el comando mysqldump. Utilizando los
mismos datos que en el ejemplo anterior, el comando a ejecutar sera:

$ mysql --user=root --password=root < copia_seguridad.sql

En este comando no hace falta indicar el nombre de la base de datos que se est recuperando, porque los
archivos generados por mysqldump ya contienen esa informacin. De hecho, al ejecutar este comando de
recuperacin se borra la base de datos original y toda la informacin de sus tablas, para despus insertar
toda la informacin contenida en el archivo copia_seguridad.sql.
Si la copia de seguridad la haces en una versin de MySQL moderna y la recuperacin de la informacin se
realiza en una versin un poco antigua, es mejor que aadas la opcin --skip-opt al realizar la copia de
seguridad, para desactivar algunas opciones modernas e incompatibles:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --skip-opt


NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Copias de seguridad de ms de una base de datos


Normalmente el comando mysqldump se utiliza para realizar la copia de seguridad de una nica base de
datos. No obstante, en ocasiones es necesario copiar varias bases de datos. Para ello, utiliza la opcin --
databases e indica el nombre de todas las bases de datos separados por un espacio en blanco:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --databases


NOMBRE_BASE_DE_DATOS_1 NOMBRE_BASE_DE_DATOS_2
NOMBRE_BASE_DE_DATOS_3 > copia_seguridad.sql

Si lo que quieres es realizar una copia de seguridad de todas las bases de datos, utiliza en su lugar la opcin -
-all-databases:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --all-


databases > copia_seguridad.sql

Obtener el dump de una base de datos Mysql


Posted on 04/07/2014 by andrezgz
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 lnea 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 continuacin se nos solicitar la clave de dicho usuario:


Enter password: ********

De esa manera obtendremos el conjunto de sentencias SQL que permitirn a futuro la restitucin del
contenido mediante la importacin del dump a una base de datos Mysql

Opciones
Las opciones que se utilizan por defecto ms importantes se detallan a continuacin. Les recomiendo
que cuando indiquen omitir una caracterstica lo recomendable es agregar la opcin al final de la lista
para asegurarse que se aplica y no es revertida por otra opcin que se indique despus.

--comments, -i

Registrar informacin adicional como la versin 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 conexin a UTC y agregando la sentencia SET
TIME_ZONE=+00:00 al dump. De lo contrario, se usaran las zonas horarias del servidor origen y
destino en cada operacin, lo que modificara 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 mltiples triggers por
evento, cuando se hayan dado el caso al generar el dump.
Omitir con --skip-triggers

--opt

Es la combinacin 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 restitucin es ms rpida.

--create-options

Incluye las opciones de tabla especficas de Mysql en las sentencias CREATE TABLE. (No pude
encontrar precisamente cules 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 importacin 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 mltiples listas en VALUES) en lugar de una sentencia
INSERT por cada registro.
+ El dump es ms chico y las inserciones se hacen ms rpido (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.

mysqldump es parte de los "MySQL Client Programs" programas de cliente de MySQL, que
puede ser utilizado para generar respaldos de bases de datos y ser usados o incluso
para ser transferidos a otro servidor de base datos SQL (No estrictamente tiene que
ser un servidor MySQL).

En este gua prctica de LinuxTotal aprenders (por ejemplos) los usos y opciones ms
comunes de este potente comando de MySQL.

Uso bsico
Tres formas bsicas de invocar mysqldump son posibles:
1) mysqldump [opciones] nombre_bd [nombre_tabla1 nombre_tabla2 ...] > respaldo.sql2)
mysqldump [opciones] --databases nombre_bd1 nombre_bd2 > respaldo.sql3) mysqldump [opciones]
--all-databases > respaldo.sql

1) respalda una sola base de datos, indicando su nombre, y opcionalmente una o ms


tablas de la misma base de datos. Si no se indican tablas, se respaldan todas.
2) respalda una o ms bases de datos de forma completa, no se pueden indicar tablas
individuales de esta manera.
3) respalda de forma completa todas las bases de datos del servidor MySQL de forma
completa, no se pueden indicar tablas individuales de esta manera.

En todos los casos se indica que la salida del comando, es decir, el vaciado del
respaldo se guarde en el archivo llamado "respaldo.sql", este archivo es el resultado
final, lo que puede utilizarse despus para restaurar una base de datos (vase ejemplos
ms adelante).

Opciones ms comunes
mysqldump es un comando con decenas de opciones, para verlas todas utiliza la ayuda
en lnea que se proporciona a travs de --help
mysqldump --help

Lo anterior muestra las posibles opciones especficas de la versin de MySQL que


utilices asi que pueden variar con respecto a la siguiente lista:

mysqldump OPCIONES MS
COMUNES
Opcin Corto Descripcin
--add-drop-database Aade la sentencia 'DROP
DATABASE' antes de cada
sentencia 'CREATE DATABASE'
--add-drop-table Aade la sentencia 'DROP TABLE'
antes de cada sentencia 'CREATE
TABLE'
--all-databases -A Respalda todas las tablas de todas
las bases de datos.
--comments -i Aade comentarios en el archivo
de respaldo. Esta opcin est por
defecto activada, para desactivar
los comentarios utiliza --skip-
comments.
--compatible=nombre Produce una salida ms compatible
con otros sistemas de bases de
datos o versiones anteriores de
MySQL. nombre puede tomar estos
valores: ansi, mysql323, mysql40,
postgresql, mssql, oracle, db2,
maxdb.
--complete-insert -c Usa sentencias INSERT completas
que incluyen nombres de
columnas.
--create-options Incluye todas las opciones
especficas de MySQL para la
creacin de tablas que se usan con
la sentencia 'CREATE TABLE'.
--databases -B Permite respaldar una o ms bases
de datos. Despus de la opcin se
indica(n) el(los) nombre(s) de la(s)
base de datos a respaldar. Se
respalda cada base de datos
completa. En la salida se incluye
con esta opcin las sentencias
'CREATE DATABASE' y 'USE' antes
de cada nueva base de datos.
--extended-insert -e Usa la sentencia 'INSERT' con el
formato de mltiples registros con
varias listas de 'VALUES'. Esto
produce una salida ms reducida y
acelera el proceso de INSERTS
cuando el archivo es restaurado.
Ideal para bases de datos con
tablas que contienen miles de
registros.
--force -f Si se tienen views o vistas en la
base de datos a respaldar y la vista
hace referencia a una tabla que ya
no existe, el vaciado del respaldo
terminar con un error sin
completarse. Con esta opcin se
podr continuar.
--host=nombre -h nom Se realiza el respaldo de el servidor
MySQL indicado por nombre,
puede ser una direccin IP o un
nombre de servidor vlido. Si no se
especifica el default es localhost.
--ignore-table=bd.tabla Si no se desea respaldar una tabla
en especfico se utiliza esta opcin,
es obligario indicar la base de
datos un punto y despus nombre
de la tabla. Si son varias tablas las
que se han de ignorar se usa esta
opcin mltiples veces. Tambin
puede usarse para ignorar vistas.
--master-data Si el respaldo viene de un servidor
MySQL que actua como maestro
en una esquema de replicacin, el
uso de esta opcin es muy
importante ya que incluira
sentencias del tipo "CHANGE
MASTER TO" que indican la
posicin en los archivos de bitcora
binarios necesarios para que los
servidores esclavos se sincronicen
adecuadamente.
--no-create-db -n Esta opcin suprime las sentencias
"CREATE DATABASE" que por
defecto se incluyen en el respaldo.
--no-data -d No escribe o respalda registro
alguno solo el esquema de la base
de datos.
--opt Esta opcin esta por defecto
activada, produce un vaciado
rpido y totalmente compatible
con otros servidores MySQL. Es un
alias que activa las opciones --add-
drop-table, --create-options, --
extended-insert, entre otras.
--password[=pass] -p[pass] La contrasea para conectarse al
servidor indicado en la opcin --
host. Si usas la opcin corta p no
debe haber un espacio. Es posible
no indicar la contrasea y despus
de presionar la tecla intro se
preguntar por esta.
--port=num -P num Si servidor indicado en la opcin --
host utiliza un puerto diferente al
default del servicio mysql (3306)
debe de indicarse con esta opcin.
--quick -q Va de la mano con la opcin --
single-transaction ya que aplica
principalmente para tablas grandes
y del tipo transaccional. Permite
agilizar la escritura al archivo de
respaldo al leer registro por
registro sin mandarlo a un buffer
previo.
--quote-names -Q Opcin por defecto activada. Pone
entre comilla grave "`" a los
nombres de los objetos como base
de datos, tablas, columnas. Es
recomendable dejarla siempre
para evitar problemas de
compatibilidad, pero si se desea
desactivar utiliza la opcin --skip-
quote-names
--routines -R Incluye en el respaldo rutinas
almacenadas (procedimientos y
funciones). Con esta funcin se
incluyen las sentencias "CREATE
PROCEDURE" Y "CREATE
FUNCTION" que permiten re-crear
completamente procedimientos
almacenados y funciones. Esta
opcin NO esta por defecto en
mysqldump asi que es motivo de
sorpresa para DBA's nuevos
enterarse que el respaldo en el que
tanto confiaban no est completo
al momento de necesitarlo, sino
utilizaron esta opcin.
--single-transaction Opcin til solo con tablas
transaccionales como las del tipo
InnoDB, ya que garantiza la
integridad y la consistencia sin
bloquear las tablas. Esto lo logra al
emitir una sentencia "START
TRANSACTION" antes de vaciar los
datos al respaldo.
--skip-opt Desactiva la opcin por defecto --
opt, con lo que se tienen que
indicar individualmente las
opciones a las que --opt hace
referencia.
--triggers Incluye triggers creados en el
respaldo. Esta opcin es
automtica, esta por defecto, sino
se quiere utilizar el respaldo de
triggers utiliza --skip-triggers
--user=nombre -u nom El nombre de usuario de MySQL
para conectarse al servidor
indicado en la opcin --host.
--verbose -v Modo verboso. Imprime
informacin de lo que est
haciendo el respaldo, usa doble -v -
vpara modo aun ms verboso.
--xml -X En vez de un respaldo por defecto
formateado con sentencias SQL,
esta opcin ofrece una salida en un
formato XML bien formado.

Ejemplos de uso de mysqldump


Respaldo de una sola base de datos completa
mysqldump clientes > clientes.sql

Respaldo de una sola base de datos con dos tablas


mysqldump clientes saldos facturas > clientes.sql

Respaldo completo de base de datos clientes y ventas


mysqldump --databases clientes ventas > respaldo_cli_ven_sep_2011.sql

Respaldamos la base de datos clientes pero ignoramos las tablas 'temporal' y 'basura'
(Obligatorio indicar base.tabla)
mysqldump clientes --ignore-table=clientes.temporal --ignore-table=clientes.basura >
respaldo_clientes_2011.sql

Respaldo completo de todas las bases de datos


mysqldump --all-databases > respaldo_full_sep_2011.sql

Si se tiene contrasea (como debe ser) se indica usuario y que pregunte por el password
mysqldump -u root -p --all-databases > respaldo_full_sep_2011.sql

No muy buena idea, pero se puede indicar el password directamente, adems nos
aseguramos que se indiquen las opciones por defecto ms comunes
mysqldump -u root -psecreto --all-databases --opt > respaldo_full_sep_2011.sql

Respaldo de una base de datos transaccional tipo InnoDB o BDB asegurando su


consistencia
mysqldump -u root -p --single-transaction --quick ventas > respaldo_ventas_2011.sql

Todas las bases de datos del host 192.168.0.100 y agregamos los procedemientos
almacenados que sean respaldados tambin.
mysqldump -h 192.168.1.100 -u root -p --routines --all-databases > respaldo_ventas_2011.sql

Respaldo de las bases de datos clientes y pedidos, con todas las opciones especficas
para re-crear las tablas, adems aadimos 'drop database' para asegurarnos que en la
restauracin se cre desde cero el respaldo, adems ignoramos errores..
mysqldump -u root -p --create-options --add-drop-database --force --databases clientes
pedidos > respaldo_ven_ped_2011.sql

Respaldo completo de un servidor MySQL maestro en replicacin, indicando en el respaldo


la posicin para sincronizacin con servidores esclavos, adems aadimos insertar
completos que incluyen los nombres de columnas en sentencias INSERT
mysqldump -u root --password=secreto --all-databases --master-data --complete-insert >
respaldo_2011.sql

Respaldamos solo el esquema de clientes sin registros


mysqldump --no-data clientes > respaldo_esquema_clientes_2011.sql

Se produce una salida compatible para restaurar la base de datos en Oracle


mysqldump --compatible=oracle --databases clientes > respaldo_clientes_oracle_2011.sql

mysqldump con gzip


Al mismo tiempo que realizamos el respaldo podemos comprimirlo para ahorrar espacio
en nuestros respaldos.
mysqldump -u root -p --all-databases | gzip > respaldo_2011.sql.gz

Para descomprimir lo anterior y dejar el archivo listo para la restauracin en si


utiliza gunzip
gunzip respaldo_2011.sql.gz

Restaurando el respaldo
Hay varias maneras de lograr la restauracin del respaldo. Con el comando mysql:
mysql -u root -p < respaldo.sql

Si se utiliz gzip para comprimir el respaldo, se puede descomprimir y restaurar en


una sola lnea:
gunzip < respaldo.sql.gz | mysql -u root -p

Si el respaldo contiene una sola base de datos y no contiene sentencias 'drop database'
y 'create database', se puede entonces indicar la base de datos donde se debe realizar
la restauracin:
mysql -u root -p clientes < respaldo_clientes.sql

Lo anterior (cuando ya existe la base de datos) tambin se puede lograr con el comando
mysqlimport
mysqlimport -u root -p clientes respaldo_clientes.sql
Es posible tambin utilizar la opcin "-e" (execute) de mysql, que permite ejecutar
un archivo con sentencias SQL, y un respaldo es exactamente eso, un largo script con
sentencias SQL para recrear esquema y datos:
mysql -u root -p -e "source /ruta/a/respaldo.sql"

El cliente de MySQL trae por defecto dentro de las utileras, un comando que nos
sirve para realizar respaldos de datos en el servidor MySQL. Dicho comando es
mysqldump.
El comando mysqldump se utiliza desde la terminal y recibe una serie de
parmetros en los cuales podemos definir el realizar un respaldo completo del
servidor, de una base de datos especfica tablas especficas dentro de una
base de datos. Esto es muy til cuando tenemos informacin crtica y deseamos
implementar una tarea automtica de respaldos.
As como con el cliente de MySQL, el comando mysqldump necesita de un usuario
que tenga los privilegios necesarios para extraer la informacin de la base de
datos a respaldar.
La sintxis bsica del comando mysqldump es:
mysqldump -u [usuario] -p [base de datos] > [archivo de respaldo].sql

Rutinas bsicas con el comando mysqldump


Dentro de las rutinas bsicas de respaldo podemos encontrar las siguientes:

Respaldo completo de una base de datos


mysqldump -u [usuario] -p [base de datos] > [archivo de respaldo].sql

Respaldo parcial de una base de datos


mysqldump -u [usuario] -p [base de datos] [tabla1] [tabla2] > [archivo de
respaldo].sql

Respaldo parcial de una base de datos, slo estructura (sin datos)


mysqldump -u [usuario] -p [base de datos] [tabla1] [tabla2] --no-data > [archivo de
respaldo].sql

Respaldo completo de todas las bases de datos


mysqldump -u [usuario] -p --all-databases > [archivo de respaldo].sql

Respaldo parcial de una tabla a formato CSV


mysqldump -u [usuario] -p --tab /tmp --fields-enclosed-by=\" --fields-terminated-
by=, [base de datos] [tabla1] [tabla2]

Este ltimo comando va a crear dos archivos para cada tabla, uno en formato .txt
con la informacin y otro en formato .sql con la estructura de la tabla.
Crear copia de seguridad de una base de datos ya creada
En el men superior, haz click en Exportar para acceder a la funcin de exportacin.

Ahora tendrs la posibilidad de elegir o bien tablas por separado de la base de


datos o bien todas las tablas, para las que quieras establecer una copia de
seguridad. En el ejemplo presentado ms abajo se han seleccionado todas las tablas
por medio de la funcin Seleccionar todo, ya que aqu se trata de una copia de
seguridad de la base de datos completa.

A continuacin haz click abajo del todo de la pgina en el botn Continuar para que
la ventana de descarga se abra y se pueda guardar as la copia de tu base de datos
con la terminacin .sql en la carpeta que desees.

Restauracin de una base de datos existente


Una vez haya accedido con phpMyAdmin a la base de datos deseada a travs del
apartado de Administracin de bases de datos, hazclic en la pestaa Bases de datos y
escoge la base de datos a la que quiera importar los datos.
Advertencia
Abre la copia de la base de datos a importar con un editor y comprueba si contiene
las siguientes lneas:
CREATE DATABASE `DBxxxxxx` ... ; USE DBxxxxxx;

De ser as, elimnalas para que la importacin pueda llevarse a cabo sin
restricciones.

A continuacin, haz clic en la pestaa Importar para iniciar la importacin de la


base de datos.

Debers elegir el archivo donde se encuentra la copia de seguridad de la base de


datos.

Cuando se acabe la importacin, aparecer el correspondiente mensaje.


En este artculo veremos la manera ms sencilla de hacer una copia de respaldo y
luego restaurar una base de datos Mysql.

Copia de respaldo
Para hacer una copia de respaldo de una base de datos se recomienda crear un dump.

Para hacer un dump de todas las bases de datos es necesario ejecutar el comando:

mysqldump --user=****** --password=****** -A > /Ruta/Hacia/archivo_dump.SQL

Para hacer un dump de slo algunas bases de datos es necesario ejecutar el


comando:

mysqldump --user=****** --password=****** db_1 db_2 db_n> /Ruta/Hacia/archivo_dump.SQL

Para hacer un dump de todas las tablas de una base de datos es necesario ejecutar
el comando:

mysqldump --user=****** --password=****** db > /Ruta/Hacia/archivo_dump.SQL

Para hacer un dump de slo ciertas tablas de una base de datos es necesario
ejecutar el comando:

mysqldump --user=****** --password=****** db --tablas tab1 tab2 >


/Ruta/Hacia/archivo_dump.SQL

Para cada uno de estos comando es necesario indicar un usuario ( user) y la contrasea
(password) con derechos de administrador en la base de datos.

Restauracin
Para restaurar un dump tan slo hay que ejecutar el comando:
mysql --user=****** --password=****** db_nom < /Ruta/Hacia/archivo_dump.SQL

El comando mysqldump del sistema gestor de base de datos


MySQL sirve para hacer copias de seguridad. Lo explicamos
con detenimiento y vemos sus opciones ms importantes.
En este artculo vamos a conocer una herramienta esencial de MySQL, para realizar
copias de bases de datos, o backups, en el lenguaje SQL. Se trata de mysqldump, un
comando que funciona en el terminal, compatible con cualquier sistema operativo
donde corra MySQL. Comenzaremos analizando las opciones disponibles y al final
daremos una serie de ejemplos de uso que resultarn tiles para situaciones
variadas.

Este comando permite hacer la copia de seguridad de una o mltiples bases de datos.
Adems permite que estas copias de seguridad se puedan restaurar en distintos tipos
de gestores de bases de datos, sin la necesidad de que se trate de un gestor de
MySQL. Esto lo consigue creando unos ficheros, que contienen todas las sentencias
SQL necesarias para poder restaurar la tabla, que incluyen desde la sentencia de
creacin de la tabla, hasta una sentencia insert por cada uno de los registros que
forman parte de la misma.

Para poder restaurar la copia de seguridad, bastar con ejecutar todas las
sentencias SQL que se encuentran dentro del fichero, bien desde la lnea de comandos
de mysql, o desde la pantalla de creacin de sentencias sql de cualquier entorno
grfico como puede ser el Mysql Control Center.

Las limitaciones de la restauracin dependern de las opciones que se han


especificado a la hora de hacer la copia de seguridad, por ejemplo, si se incluye la
opcin --add-drop-table al hacer la copia de seguridad, se podrn restauran tablas
que existen actualmente en el servidor (borrndolas primero). Por lo que es
necesario estudiar primero los procedimientos que se utilizarn tanto en la copia
como en la restauracin, para que todo salga correcto!

Opciones disponibles en el comando


El comando dispone de una amplia variedad de opciones que nos permitir realizar la
copia de la forma ms conveniente para el propsito de la misma. Algunas de las
opcines ms importantes son:

--add-locks
Aade LOCK TABLES antes, y UNLOCK TABLE despues de la copia de cada tabla.

--add-drop-table
Aade un drop table antes de cada sentencia create

-A, --all-databases
Copia todas las bases de datos. Es lo mismo que utilizar --databases seleccionando
todas.

-a, --all
Incluye todas las opciones de creacin especficas de Mysql.

--allow-keywords
Permite la creacin de nombes de columnas que son palabras clave, esto se realiza
poniendo de prefijo a cada nombre de columna, el nombre de la tabla

-c, --complete-insert
Utiliza inserts incluyendo los nombres de columna en cada sentencia (incrementa
bastante el tamao del fichero)
-C, --compress
Comprime la informacin entre el cliente y el servidor, si ambos soportan
compresin.

-B, --databases
Para copiar varias bases de datos. En este caso, no se especifican tablas. El nombre
de los argumentos se refiere a los nombres de las bases de datos. Se incluir USE
db_name en la salida antes de cada base de datos.

--delayed
Inserta las filas con el comando INSERT DELAYED.

-e, --extended-insert
Utiliza la sintaxis de INSERT multilinea. (Proporciona sentencias de insert ms
compactas y rpidas.)

-#, --debug[=option_string]
Utilizacin de la traza del programa (para depuracin).

--help
Muestra mensaje de ayuda y termina.

--fields-terminated-by=...
--fields-enclosed-by=...
--fields-optionally-enclosed-by=...
--fields-escaped-by=...
--lines-terminated-by=...
Estas opciones se utilizan con la opcin -T y tienen el mismo significado que la
correspondiente clusula LOAD DATA INFILE.

-F, --flush-logs
Escribe en disco todos los logs antes de comenzar con la copia.

-f, --force,
Contina aunque se produzca un error de SQL durante la copia.

-h, --host=..
Copia los datos del servidor de Mysql especificado. El servidor por defecto es
localhost.

-l, --lock-tables.
Bloquea todas las tablas antes de comenzar con la copia. Las tablas se bloquean con
READ LOCAL para permitir inserts concurrentes en caso de las tablas MyISAM.

Cuando se realiza la copia de mltiples bases de datos, --lock-tables bloquea la


copia de cada base de datos por separado. De forma que esta opcin no garantiza que
las tables sern consistentes lgicamente entre distintas bases de datos. Las tablas
en diferentes bases de datos se copiarn en estados completamente distintos.

-K, --disable-keys
Se incluir en la salida /*!40000 ALTER TABLE tb_name DISABLE KEYS */; y /*!40000
ALTER TABLE tb_name ENABLE KEYS */; Esto har que la carga de datos en un servidor
MySQL 4.0 se realice ms rpido debido a que los ndices se crearn despus de que
todos los datos hayan sido restaurados.
-n, --no-create-db
No se incluir en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta
lnea se incluye si la opcin --databases o --all-databases fue seleccionada.

-t, --no-create-info
No incluir la informacin de creacin de la tabla (sentencia CREATE TABLE).

-d, --no-data
No incluir ninguna informacin sobre los registros de la tabla. Esta opcin sirve
para crear una copia de slo la estructura de la base de datos.

--opt
Lo mismo que --quick --add-drop-table --add-locks --extended-insert --lock-tables.
Esta opcin le debera permitir realizar la copia de seguridad de la base de datos
de la forma ms rpida y efectiva.

-pyour_pass, --password[=your_pass]
Contrasea utilizada cuando se conecta con el servidor. Si no se especifica,
`=your_pass', mysqldump preguntar la contrasea.

-P, --port=...
Puerto utilizado para las conexiones TCP/IP

--protocol=(TCP | SOCKET | PIPE | MEMORY)


Especifica el protocolo de conexin que se utilizar.

-q, --quick
No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza
mysql_use_result() para realizarlo.

-Q, --quote-names
Entrecomilla las tablas y nombres de columna con los caracteres ``'.

-r, --result-file=...
Redirecciona la salida al fichero especificado. Esta opcin se debera utilizar en
MSDOS, porque previene la conversin de nueva lnea `\n' en nueva lnea y retorno de
carro`\n\r'.

--single-transaction
Utiliza el comando BEGIN antes de realizar la copia desde el servidor. Es muy til
con las tables InnoDB y el nivel de transaccin READ_COMMITTED, porque en este modo
realizar la copia de seguridad en un estado consistente sin necesidad de bloquear
las aplicaciones. Consultar el manual para ms detalles.

-S /path/to/socket, --socket=/path/to/socket
El fichero de sockets que se especifica al conectar al localhost (que es el host
predeterminado).

--tables
sobreescribe la opcin --databases (-B).

-T, --tab=path-to-some-directory
Crea un fichero table_name.sql, que contiene la sentencia de creacin de SQL, y un
fichero table_name.txt, que contiene los datos de cada tabla. El formato del fichero
`.txt' se realiza de acuerdo con las opciones --fields-xxx y --lines--xxx options.
Nota: Esta opcin slo funciona si el comando mysqldump se ejecuta en la misma
mquina que el demonio mysqld, el usuario deber tener permisos para crear y
escribir el fichero en la ubicacin especificada

-u nombre_usuario, --user=nombre_usuario
El nombre de usuario que se utilizar cuando se conecte con el servidor, el valor
predeterminado es el del usuario actual.

-v, --verbose
Va mostrando informacin sobre las acciones que se van realizando (ms lento)

-w, --where='clusula where'


Sirve para realizar la copia de determinados registros

-X, --xml
Realiza la copia de seguridad en un documento xml

-x, --first-slave
Bloquea todas las tablas de todas las bases de datos

Ejemplos de comandos mysqldump:


Para realizar la copia se seguridad de la base de datos mibase al fichero
copia_seguridad.sql

mysqldump --opt mibase > copia_seguridad.sql

Otro ejemplo ms complejo de comando mysqldump para hacer el backup de una base de
datos es el siguiente:

mysqldump --opt --password=miclave --user=miuser mibasededatos > archivo.sql

En este ltimo caso estamos indicando un nombre de usuario y una clave para acceder
a la base de datos sobre la que se est haciendo el backup: mibasededatos. Las
sentencias SQL para reconstruir esa base de datos se volcarn en el fichero
archivo.sql.

mysqldump --opt --password=clave --user=usuario Base_de_datos tabla1 tabla2 >


backupdostablas.sql

Este comando es prcticamente igual que el anterior, pero en este caso nos realiza
la copia de seguridad de nicamente dos tablas "tabla1" y "tabla2", que estn en la
base de datos "Base_de_datos".

Restaurar la base de datos


Si deseamos recuperar la informacin de un fichero para restaurar una copia de
seguridad de la base de datos lo haremos con el comando mysql. Utilizaremos una
sintaxis como esta:

mysql mibase < archivo.sql

En este ejemplo se restaurara la base de de datos mibase con el backup almacenado


en el fichero archivo.sql.

Otro ejemplo ms complejo de comando para restaurar una base de datos es el


siguiente:

mysql --password=miclave --user=miuser mibase < archivo.sql


Es el mismo ejemplo que el anterior, pero indicando un nombre de usuario y una clave
con las que acceder a la base de datos mibase.

Cmo realizar un backup de las tablas de una base de datos


y su recuperacin a partir de sentencias SQL.
Veremos cmo realizar una copia de seguridad de la tabla y su recuperacin a partir
de sentencias SQL.

Backup de los datos


Este comando nos permite hacer una copia de los ficheros de las tablas de las cuales
queremos hacer un backup, actualmente solo funciona con tablas de tipo MyIsam, y
copia tanto los ficheros .frm que contienen la definicin de la tabla, como los
ficheros .myd, que contienen los datos.

Antes de ejecutarse, guarda todos los cambios que pudiera haber en memoria de la
tabla, de forma que quede de una manera consistente. Asimismo, durante la ejecucin
del comando, bloquea la tabla sobre la que se est haciendo la copia de seguridad
para que los datos sean consistentes en la tabla. Hay que tener en cuenta que este
comando va bloqueando una a una las tablas, segn va haciendo la copia de seguridad.
Esto podra provocar inconsistencia de datos a nivel de base de datos, si es
necesario hacer un backup de todas las tablas en un instante, en cuyo caso habra
que utilizar el comando "lock tables" para bloquear todas las tablas antes de
comenzar la copia de seguridad.

Al finalizar el comando devuelve una tabla, que contiene los campos:

Columna Valores
Table Nombre de la tabla
Op Siempre pone "backup"
Msg_type Puede contener status, error, info o warning.
Msg_text Mensaje descriptivo del resultado de la
operacin
Y en la que hay un registro por cada tabla que sobre la que se ha hecho backup.

Para realizar una copia de una tabla llamada pedidos, a la carpeta Backups:

BACKUP TABLE pedidos TO `/backups/`

Recuperacin de datos
Para complementar la sentencia "Backup table", Mysql dispone de la sentencia
"Restore table", que permite restaurar una tabla a partir de una copia de seguridad
que se ha realizado con el comando "Backup Table".

Esta opcin solo se puede utilizar si la tabla que se pretende restaurar no se


encuentra en la base de datos, ya que en caso afirmativo mostrar un mensaje de
error. Al igual que el comando de Backup, esta opcin slo esta disponible para las
tablas de tipo MyIsam, y a partir de la versin 3.23.25.

Como el comando de backup, no copia los ficheros de ndices, el comando para


recuperar los datos, vuelve a reindexar todos los campos que contienen ndices,
creando los ficheros correspondientes. Al igual que el comando para hacer copias de
seguridad, invocar al comando "Restore table" devuelve una tabla, con un registro
por cada tabla sobre la que se ha hecho la base de datos, y que contiene la
siguiente informacin:

Columna Valores
Table Nombre de la tabla
Op Siempre pone "restore"
Msg_type Puede contener status, error, info o warning.
Msg_text Mensaje descriptivo del resultado de la
operacin
Para restaurar una tabla llamada pedidos de la carpeta Backups a la base de datos:

RESTORE TABLE pedidos FROM `/backups/`

Nota: Para continuar aprendiendo mtodos para realizar un backup de una base de
datos MySQL tenemos el artculo Backup MySQL con mysqldump, que ensea a manejar el
comando mysqldump para hacer una copia de seguridad de la base de datos entera.

Conceptos a tener en cuenta a la hora de hacer una copia de


seguridad y mtodos disponibles para ello.
El gestor de Bases de datos MySQL incluye varias herramientas para la realizacin de
copias de seguridad de la base de datos. Mediante ellas podremos poner a salvo
nuestros datos, para que, en el eventual caso de que se pierdan, poderlos recuperar.

A la hora de hacer una copia de seguridad, lo primero que se hay que tener en cuenta
es la integridad de los datos que se estn guardando. En todos los casos es
necesario que haya integridad en los datos de una tabla, con esto quiero decir que
todos los datos de la tabla debern estar escritos en la misma, esto puede sonar un
poco raro, pero tal y como pasa con todos los gestores de bases de datos, Mysql
dispone de diversas "caches" en las que se almacenan datos temporalmente con el
objetivo de mejorar en rendimiento, de forma que por ejemplo, una vez hecha una
modificacin en una tabla, puede ser que los datos no se guarden inmediatamente en
disco, hasta que termine, por ejemplo, una consulta que se estaba ejecutando. Por
esto, es necesario "forzar" a Mysql a escribir todos los datos en el disco, mediante
la sentencia "Flush Tables".

Adems es necesario que no se escriba en las tablas mientras se esta haciendo la


copia de seguridad de la base de datos, que se consigue con el comando "lock
tables", seguido del nombre de la tabla. Puede haber bases de datos en las que sea
necesario bloquear todas las tablas al mismo tiempo antes de hacer la copia de
seguridad.

Existen varias opciones para realizar la copia de seguridad de una base de datos de
Mysql,

En primer lugar, se podra utilizar alguna herramienta comercial que gestione todo
el proceso, esto tiene como ventaja la simplicidad del mtodo, y como
inconveniente, que no suelen ser gratis, sino que hay que pagar licencia por la
utilizacin de los mismos. Estas herramientas no se cubrirn en este reportaje.
En segundo lugar, y a partir de la versin 3.23.25 y posteriores, existe la
posibilidad de realizar una copia de seguridad a travs de la sentencia sql
"backup table".
Como tercera opcin, es posible realizar copias de seguridad a travs de las
herramientas que nos proporciona el propio gestor de base de datos, como pueden
ser mysqldump mysqlhotcopy.

Nota: Llegado a este punto necesitars acceder a los siguientes artculos, en los
que se detalla el proceso de creacin de las copias de seguridad MySQL por dos
mtodos:

- Backup MySQL mediante Sentencias Sql


- Backup MySQL con mysqldump

Respaldar y Restaurar Bases de Datos Mysql desde Shell


Respaldo y Restauracin MySQL de Manera Local.
Para hacer un respaldo de una base de datos MySQL desde nuestro consola o mediante comandos
shell podemos usar el comando mysqldump como lo ejemplificamos en la siguiente liga.

Comando: mysqldump -u usuario -pcontrasea nombre-de-la-base-de-datos > nombre-del-


respaldo.sql

NOTA: Las comillas deben omitirse tanto en el usuario como en la contrasea.

Para restaurar un respaldo de una base de datos MySQL usamos el siguiente comando

Comando: mysql -u usuario -pcontrasea nombre-de-la-base-de-datos < nombre-del-


respaldo.sql

NOTA: Al igual que en el ejemplo anterior las comillas deben omitirse tanto en el usuario
como en la contrasea.

Respaldo y Restauracin MySQL de Manera Remota.


Para Respaldar o Restaurar una Base de datos remota usamos los mismos comandos que de manera
local, con la nica diferencia de agregar la opcin -h con la cual especificaremos el
nombre o direccin del host en donde se encuentra nuestra base.

Para Respaldar usamos:

Comando: mysqldump -u usuario -pcontrasea -hnombre-o-direccin-del-host nombre-de-la-


base-de-datos > nombre-del-respaldo.sql

Para restaurar usamos:

Comando: mysql -u usuario -pcontrasea -hnombre-o-direccin-del-host nombre-de-la-base-


de-datos < nombre-del-respaldo.sql

Para restaurar una base de datos, debe disponer de una copia de seguridad de la base de datos.

Una copia de seguridad recibe a menudo el nombre de "copia vlida conocida" de un archivo de base de
datos, es decir, una copia de la que est seguro de su diseo y de la integridad de sus datos. Debe usar
el comando Realizar copia de seguridad de la base de datos de Microsoft Office Access para hacer
copias de seguridad, pero puede usar cualquier copia vlida conocida para restaurar una base de datos.
Por ejemplo, puede restaurar una base de datos a partir de una copia almacenada en un dispositivo USB
externo de copia de seguridad.

Puede restaurar toda la base de datos o algunos de sus objetos.


Si no dispone de una copia de seguridad, existe el peligro de que se pierdan datos, se efecten cambios
no deseados o se dae el diseo de la base de datos. Por este motivo, debe hacer copias de seguridad
peridicamente. Para obtener ms informacin sobre cmo planear y crear copias de seguridad de bases
de datos, vea el artculo Hacer una copia de seguridad de una base de datos.

Restaurar backups de Mysql


En sta oportunidad, vamos a ver cmo restaurar una base de datos en Mysql. Adems,
algunas aclaraciones sobre el uso de mysqldump que pueden ayudarnos con las
restauraciones de bases de datos.

La forma de restaurar una base de datos Mysql desde la consola, tomando un backup,
sera asi.

mysql -u usuario -p basededatos < basededatos.sql


El escenario que estoy suponiendo, implica que la base de datos que estn queriendo
importar no existe en su servidor Mysql.

Si este supuesto es correcto, se van a encontrar con un problemita, o mejor dicho,


con un mensaje al ejecutar el comando.

ERROR 1049 (42000): Unknown database 'basededatos'


Esto se debe a la inexistencia de la base dentro de nuestro Mysql.

Tenemos dos maneras de resolver sta situacin.

1. Editar el archivo sql y agregarle a mano los comandos necesarios para la creacin de
la base.
2. Agregar dos parmetros a nuestro comando mysqldump.
En el primer caso, deberamos agregar a nuestro archivo, las siguientes
instrucciones.

CREATE DATABASE basededatos;USE DATABASE basededatos;


Con esto, el script funcionara correctamente. Lo malo de sta forma, es que si
tenemos backups muy muy pesados, puede resultar algo engorroso estar editndolos.

Para evitarnos este paso, vamos a cambiar la forma de ejecutar mysqldump.

Lo habitual y ms simple para hacer el backup sera ejecutar el comando de sta


forma.

mysqldump -hhost -uusuario -ppassword basededatos > basededatos.sql


Como ya dije, esto no nos funcionar correctamente. As que vamos a sumar algunos
parmetros para estar ms tranquilos.

Los parmetros en cuestin son:

databases
add-drop-database

Con databases mysqldump agregar automticamente las instrucciones de creacin y uso


de base de datos.

Ahora bien, podra darse que por algn motivo, la base de datos existiera. Para
evitar el conflicto, es que agregamos add-drop-database. Con esto, nos garantizamos
que se agregue la instruccin de dropeo de la base de datos antes de la instruccin
de creacin de la misma.
Nuestro nuevo dump se ejecutara asi.

mysqldump --add-drop-database --databases -hhost -uusuario -ppassword basededatos


> basededatos.sql
Ahora si, cuando volvamos a ejecutar la restauracin, nuestra base de datos debera
quedar restaurada sin problema alguno.

COPIA LOGICA EN CALIENTE


MYSQLDUMP
Primero comprobamos que tenemos mysqldump correctamente instalado consultando la
versin

mysqldump version

Si se produce un error puede que MySQL no este bien instalado o que tengamos que
poner la ruta completa

/usr/local/mysql/bin/mysqldump version

El usuario que usemos para realizar la copia de seguridad debe tener permisos de:

SELECT sobre las tablas de la base de datos

Ahora para realizar una copia de seguridad bsica ejecutaremos lo siguiente:

mysqldump u usuario -p nombre_bbdd > nombre_fichero.sql

En nuestro caso:

Introducimos la contrasea y se creara el fichero .sql con todas las sentencias para
poder replicar la base de datos.

Para recuperar/importar la base da datos introduciremos el mismo comando pero


cambiando la redireccin:

mysqldump u usuario -p nombre_bbdd < nombre_fichero.sql

En nuestro caso:

Y al introducir la contrasea se empiezan a ejecutar todas las sentencias, por


motivos de seguridad pregunta si existe lo que va a crear, si existe lo borra, y
sino lo crea, as no habr problemas si ya tenemos la base de datos creada.

Para realizar una copia de varias bases de datos el proceso seria igual, solo
cambiara algo en la sintaxis.

Copia de seguridad de varias bases de datos:

mysqldump u usuario -p -B nombre_bbdd-1 nombre_bbdd-2 nombre_bbdd-3 >


nombre_fichero.sql

Para importar la copia de varias bases de datos:


mysqldump u usuario -p -B nombre_bbdd-1 nombre_bbdd-2 nombre_bbdd-3 <
nombre_fichero.sql

Copia de seguridad de todas las bases de datos:

mysqldump u usuario -p -A > nombre_fichero.sql

Para importar la copia de todas las bases de datos:

mysqldump u usuario -p -A < nombre_fichero.sql

MySQL Workbench
Una vez iniciado el programa y despus de conectarnos con un usuario con permisos
para consultar la base de datos de la que queremos hacer una copia.

3. Vamos a Data Export


4. Seleccionamos la base de datos de la que vamos a realizar la copia
5. Escribimos la ruta que nosotros deseemos
6. clickamos en Start Export

Si todo va bien nos dir que ha finalizado:


Si nos aparece este error:

mysqldump: [ERROR] unknown variable delayed-insert=FALSE


Si nuestro Mysql Workbench es de 64 bits deberemos ir a C:\Program
Files\MySQL\MySQL Workbench 6.3 CE\modules\

Si nuestro Mysql Workbench es de 32 bits y nuestro sistema es de 64 bits deberemos


ir a C:\Program Files(86)\MySQL\MySQL Workbench 6.3 CE\modules\

Si nuestro sistema es de 32 bits deberemos ir a C:\Program Files\MySQL\MySQL


Workbench 6.3 CE\modules\

Abrimos el fichero wb_admin_export_options.py con un bloc de notas con permisos de


administrador y aadir un # para comentar la siguiente linea:

delayed-insert:[Write INSERT DELAYED statements rather than INSERT


statements.,FALSE, BOOL, (5.0.0, 5.7.0)],

Para importar una base de datos iremos a :

7. DATA Import/Restore
8. Seleccionamos la carpeta que contiene nuestras copias de seguridad
9. Seleccionamos la base de datos
10. Clickamos en Start Import
Si todo ha ido bien se importar/restaurar la copia sin problemas:

COPIA FSICA EN FRO


Para realizar una copia de datos fsica en fro deberemos copiar los siguientes
ficheros:

Base de datos: /var/lib/mysql/nombre_bbdd


Fichero /etc/my.cnf
Fichero/s /var/lib/mysql/ibdata1,ibdata2,
Ficheros /var/lib/mysql/ib_logfile1,ib_logfile1,

Con esto copiaramos toda la estructura de MySQL con la/s bases de datos, gracias a
este respaldo podramos hacer una migracin.

Para restaurar una base de datos solo hara falta copiar los ficheros de su carpeta:

Base de datos: /var/lib/mysql/ nombre_bbdd

Para hacer la restauracin tendramos que tener creada la base de datos destino y
almacenar los ficheros de nuestra copia dentro de la carpeta de dicha base de datos.

Vamos a entrar en MySQL, veremos las bases de datos que tenemos, y seleccionaremos
una sobre la cual haremos nuestro backup. Hemos elegido mitologia:

Antes de hacer una copia fsica es recomendable parar el servidor MySQL para evitar
problemas de integridad:

systemctl stop mysqld

Procederemos a hacer una copia de nuestra base de datos en una carpeta, deber tener
las mismas propiedades(permisos, propietario, etc) que los originales:

mkdir -p /backup/mitologia

cp -p /var/lib/mysql/mitologia/* /backup/mitologia/

Para probarlo quitaremos los ficheros de base de datos, y quedara vaca:

rm /var/lib/mysql/mitologia/*

Iniciamos MySQL:

systemctl start mysqld

Entraremos a MySQL y verificamos que la base de datos mitologia esta vaca:


Salimos de MySQL y volvemos a detener el servicio:

systemctl stop mysqld

Finalmente copiaremos los ficheros de nuestro backup:

cp -p /backup/mitologia/* /var/lib/mysql/mitologia/

Volvemos a iniciar MySQL:

systemctl start mysqld

Ahora entramos en MySQL y comprobaremos que nuestra base de datos tiene los datos,
nosotros hemos mostrado todas las tablas, la estructura y los datos de la tabla
dioses:

Si todo ha ido bien ya estara restaurada nuestra base de datos.

You might also like