Está en la página 1de 17

Tema 4.- Copias de Seguridad con MySQL

Formas de llevar a cabo un backup de una base de datos MySQL

Tema 4.- Copias de Seguridad con MySQL Formas de llevar a cabo un backup de una

Muchas aplicaciones Web hacen uso de bases de datos donde almacenan toda la información que se mueve en ese portal. Comercios electrónicos, blogs, plataformas

e-

learning o páginas Web corporativas de empresas no podrían funcionar sin este tipo de sistemas de almacenamiento de la información. Ante esta situación realizar copias de seguridad de esas bases de datos se presenta como una tarea imprescindible si queremos tener la seguridad de que en caso de sufrir cualquier imprevisto de pérdida de información, poder acudir al backup correspondiente y recuperar esos datos. Son muchos los que piensan que este tipo de acciones pueden resultar muy complicadas y que únicamente expertos informáticos pueden llevar a cabo estas acciones. Por suerte esto no es así, sobre todo gracias a herramientas que nos facilitan este proceso.

Os presentamos la forma de hacer una copia de seguridad de una base de datos MySQL de dos formas distintas:

1. Utilizando la aplicación Workbench

  • 2. Mediante línea de comandos.

Antes mencionaremos los diferentes tipos de copias que existen:

Clasificación atendiendo al momento en que se realiza:

Copia de seguridad en frío.- Para solventar los problemas derivados

de la ejecución concurrente del SGBD y del mecanismo de copia seguridad se para la ejecución del SGBD. Copia de seguridad en caliente.- No afectan al servicio ya que este no se para, pero pueden comprometer la integridad de la copia.

Página1/17

Tema 4.- Copias de Seguridad con MySQL

Clasificación atendiendo al tipo de información que se archiva:

 

Física.- Se salvaguardan (haciendo copia) los ficheros físicos que

contienen los datos de la base de datos (Ej: En Innodb mysql, ficheros de datos ibdata, ficheros de estructuras .frm y fichero de log ib_logfilex) Lógica.- Se extraen los datos de las tablas exportándolos a ficheros de texto (o algún otro formato). Copias más lentas, pero son exportables a diferentes SGBD. Técnica comúnmente denominada exportación de datos, el proceso inverso es la importación de datos.

Clasificación atendiendo a como se construye la copia de seguridad:

 

Completa.- Se almacena toda la información de una o varias bases de

datos. Incremental.- Sólo se almacena la información que cambió desde la última copia de seguridad. Minimizan el tiempo que dura la copia, pero el procedimiento para su restauración es más complejo.

Combinando las diferentes clasificaciones, tenemos las siguientes tipos de copias de seguridad:

 

Backup completa, física y en frío.- Copiar los ficheros que forman

la base de datos parando previamente el SGBD. Comando copy o cp Backup completa, física y en caliente.- Copiar los ficheros sin dejar

a los usuarios sin conexión. Es necesario a recurrir a herramientas que nos proporcione el SGBD. Backup completa, lógica y en caliente.- Consultas a la base de

datos y guardar los resultados en ficheros. Varios mecanismos dependiendo del SGBD. En frío no tiene sentido. Backup incremental y física (en caliente o frío).- Solo se almacenan los cambios a partir de la última copia. En Mysql consiste en copiar los archivos que almacenan las transasacciones (log binario).

Mysql dispone de herramientas y comandos para llevar a cabo esta tarea:

MySQL WORKBENCH (Copia Lógica)

Mysqldump (copia lógica)

Mysqlhotcopy (copias en caliente motor MyIsam)

Mysql Enterprise Backup (copias en caliente motor Innodb)

Página2/17

Tema 4.- Copias de Seguridad con MySQL

LOAD DATA, SOURCE, SELECT

..

INTO

BACKUPS LÓGICOS

Copias físicas en frío

Dependerá del motor de almacenamiento del que se haga uso.

Tema 4.- Copias de Seguridad con MySQL  LOAD DATA, SOURCE, SELECT .. INTO BACKUPS LÓGICOSInnodb  MyIsam Básicamente consiste en copiar los ficheros de datos y estructuras a otro lugar, ficheros .frm, .MYD(datos myisam) y MYI(indices myisam), ibdata(datos Innodb) y logfile(log innodb), con el SGBD parado .  INCONVENIENTES:  Los usuarios no podrán operar durante el transcurso del backup.  Habrá que tener en cuenta, si se ha restaurado por completo el sistema, que la base de datos information_schema no tenga registrada ni la base de datos ni las tablas de la base de datos restaurada, y que en la base de datos mysql no se tengan los permisos adecuados, por ellos es fundamental restaurar también estas dos bases de datos. Copias físicas en caliente En el motor de almacenamiento M y Isam se puede usar el comando mysqlhotcopy .   Es un script Perl que  usa los comandos LOCK TABLES, FLUSH TABLES y cp o scp. Genera una serie de archivos. Página3/17 " id="pdf-obj-2-34" src="pdf-obj-2-34.jpg">

Básicamente consiste en copiar los ficheros de datos y estructuras a otro lugar, ficheros .frm, .MYD(datos myisam) y MYI(indices myisam), ibdata(datos Innodb) y logfile(log innodb), con el SGBD parado.

INCONVENIENTES:

Los usuarios no podrán operar durante el transcurso del backup.

Habrá que tener en cuenta, si se ha restaurado por completo el sistema, que la base de datos information_schema no tenga registrada ni la base de datos ni las tablas de la base de datos restaurada, y que en la base de datos mysql no se tengan los permisos adecuados, por ellos es fundamental restaurar también estas dos bases de datos.

Copias físicas en caliente

En el motor de almacenamiento MyIsam se puede usar el comando mysqlhotcopy.

Es un script Perl que

usa los comandos LOCK TABLES, FLUSH TABLES y cp o scp. Genera una serie de archivos.

Tema 4.- Copias de Seguridad con MySQL  LOAD DATA, SOURCE, SELECT .. INTO BACKUPS LÓGICOSInnodb  MyIsam Básicamente consiste en copiar los ficheros de datos y estructuras a otro lugar, ficheros .frm, .MYD(datos myisam) y MYI(indices myisam), ibdata(datos Innodb) y logfile(log innodb), con el SGBD parado .  INCONVENIENTES:  Los usuarios no podrán operar durante el transcurso del backup.  Habrá que tener en cuenta, si se ha restaurado por completo el sistema, que la base de datos information_schema no tenga registrada ni la base de datos ni las tablas de la base de datos restaurada, y que en la base de datos mysql no se tengan los permisos adecuados, por ellos es fundamental restaurar también estas dos bases de datos. Copias físicas en caliente En el motor de almacenamiento M y Isam se puede usar el comando mysqlhotcopy .   Es un script Perl que  usa los comandos LOCK TABLES, FLUSH TABLES y cp o scp. Genera una serie de archivos. Página3/17 " id="pdf-obj-2-80" src="pdf-obj-2-80.jpg">

Página3/17

Tema 4.- Copias de Seguridad con MySQL

La restauración se realiza en frío y consiste en copiar los ficheros y reiniciar el servidor.

Mysqlhotcopy, requiere unos cuantos privilegios del usuario que ejecuta el comando. Concretamente, se requieren:

Permisos de SELECT sobre las tablas de la base de datos

Permisos de LOCK TABLES

Permisos de RELOAD

Se puede crear un usuario de backup con estos permisos, con tal de que el usurario se use únicamente para tareas de copias de seguridad, sin necesidad de otorgarle permisos adicionales.

mysql> create user ‘backup’@'localhost’ identified by ‘mipassword’; mysql> grant select on basededatos.* to ‘backup’@'localhost’ with grant option; mysql> grant lock tables on basededatos.* to backup@localhost; mysql> grant reload on *.* to backup@localhost;

El usuario backup quedará entonces con los siguientes permisos:

mysql> show grants for backup@localhost;

+---------------------------------------------------------------------

------------------+ | Grants for backup@localhost |

+---------------------------------------------------------------------

------------------+

| GRANT RELOAD ON *.* TO 'backup'@'localhost' IDENTIFIED BY PASSWORD '7363gd5' | | GRANT SELECT, LOCK TABLES ON `basededatos`.* TO 'backup'@'localhost' |

+---------------------------------------------------------------------

2 rows in set (0.00 sec)

Con este usuario, ya se podrá ejecutar el comando mysqlhotcopy sobre la base de datos 'basededatos', tal y como sigue:

mysqlhotcopy basededatos --user=backup --password=mipassword /destino

Las primeras ejecuciones han reducido el tiempo del backup de 20 minutos (realizado con mysqldump) a poco más de 1 min 30 segundos, aunque también es verdad que los backups realizados con mysqlhotcopy, ocupan el doble que los resultantes de usar mysqldump, una vez comprimidos ambos.

En el motor de almacenamiento Innodb se usa la herramienta Mysql Enterprise Backup

Permite hacer copias de seguridad de cualquier tipo.

Página4/17

Tema 4.- Copias de Seguridad con MySQL

Caliente

Frío

BACKUPS LÓGICOS

Mysql dispone del comando mysqldump para generar respaldos de bases de

datos El comando mysqldump genera un fichero de instrucciones SQL que son

capaces de, posteriormente, volver a generar la misma base de datos que teníamos. Normalmente, este fichero contiene un CREATE TABLE por cada tabla de la base de datos, instrucciones para crear índices, y numerosos INSERT para llenar las tablas con datos (uno por registro). Sin embargo, este comando, puede resultar muy lento, para bases de datos grandes.

Backup de MySql desde Workbench(Logicos)

  • 1. Primero abre el Workbench y conéctate como Server Administración.

Tema 4.- Copias de Seguridad con MySQL  Caliente  Frío BACKUPS LÓGICOS  Mysql disponemysqldump para generar respaldos de bases de  datos El comando mysqldump genera un fichero de instrucciones SQL que son  capaces de, posteriormente, volver a generar la misma base de datos que teníamos. Normalmente, este fichero contiene un CREATE TABLE por cada tabla de la base de datos, instrucciones para crear índices, y numerosos INSERT para llenar las tablas con datos (uno por registro). Sin embargo, este comando, puede resultar muy lento , para bases de datos grandes. Backup de MySql desde Workbench(Logicos) 1. Primero abre el Workbench y conéctate como Server Administración. 2. Una vez adentro, en el menú de la izquierda dale a Data Export. 3. Selecciona las base de datos /Tablas que deseas realizar el backup. Página5/17 " id="pdf-obj-4-49" src="pdf-obj-4-49.jpg">
  • 2. Una vez adentro, en el menú de la izquierda dale a Data Export.

Tema 4.- Copias de Seguridad con MySQL  Caliente  Frío BACKUPS LÓGICOS  Mysql disponemysqldump para generar respaldos de bases de  datos El comando mysqldump genera un fichero de instrucciones SQL que son  capaces de, posteriormente, volver a generar la misma base de datos que teníamos. Normalmente, este fichero contiene un CREATE TABLE por cada tabla de la base de datos, instrucciones para crear índices, y numerosos INSERT para llenar las tablas con datos (uno por registro). Sin embargo, este comando, puede resultar muy lento , para bases de datos grandes. Backup de MySql desde Workbench(Logicos) 1. Primero abre el Workbench y conéctate como Server Administración. 2. Una vez adentro, en el menú de la izquierda dale a Data Export. 3. Selecciona las base de datos /Tablas que deseas realizar el backup. Página5/17 " id="pdf-obj-4-54" src="pdf-obj-4-54.jpg">
  • 3. Selecciona las base de datos /Tablas que deseas realizar el backup.

Página5/17

Tema 4.- Copias de Seguridad con MySQL

Creación de una copia de seguridad para una base de datos única

En primer lugar, estos son los pasos para crear una copia de seguridad de una base de datos única. 1.- Seleccione la base de datos que desea copiar haciendo clic en la casilla de verificación junto a él.

2.- A continuación, especifique el archivo de destino de la copia de seguridad. Workbench tiene la característica avanzada de lo que le permite decidir si

MySQL

desea

exportar a una carpeta de copia de seguridad del proyecto

(cada tabla

exportada se graba en un archivo aparte. "Export to Self-Contained File") o

para

exportar a un archivo autocontenido

(todos los objetos de base de datos

exportados se graban en un solo archivo.- "Export to Self-Contained File" ) .Además, se puede introducir el nombre completo de la ruta en la que desea que el servidor para crear el archivo (s).

Creación de una copia de seguridad de las tablas individuales

MySQL Workbench le da la opción de copia de seguridad de las tablas individuales. 1.- Para ello, haga clic en el nombre de la base de datos que contiene la tabla (s) que desea copiar. Tenga en cuenta que las tablas contenidas en la base de datos que eligió se mostrarán en la parte central de la pantalla. 2.- En la lista de tablas, elija los de copia de seguridad haciendo clic en las casillas de verificación.

3.- Como antes, indica el destino de la copia de seguridad.

Usted puede elegir el destino

predeterminado o escriba un nombre de ruta completo. 4. Indica el File Patch (lugar y nombre del archivo a guardar.) 5. En la parte inferior, se encuentran checks desmarca el que dice "Skip table data (no-

data)".

Tema 4.- Copias de Seguridad con MySQL Creación de una copia de seguridad para una base

Página6/17

Tema 4.- Copias de Seguridad con MySQL

  • 6. (Opcional) Si deseas tambien realizar backups de tus procedures, functions, etc. En

la parte inferior marca el check que dice "Dump Stored Procedures".

  • 7. Por ultimo dale a “Start export”.

Backup mediante línea de comando

El comando mysqldump es un programa que incluye por defecto el gestor de base de datos MySQL y que permite la posibilidad de realizar copias de seguridad de los datos almacenados ejecutando la instrucción mediante línea de comando. Este comando permite crear copias de seguridad que pueden ser restaurados en distintos tipos de gestores de bases de datos ya que devuelve un fichero SQL con todas las sentencias necesarias para la restauración de la copia en cualquier otro sitio. El comando dispone de una amplia gama de opciones que nos permitirá realizar el backup de la forma más conveniente, aunque para su uso es necesario que podamos conectarnos a la consola del servidor, cosa que no está disponible en alojamientos compartidos pero sí en el caso de disponer de un VPS, un servidor dedicado o un gestor MySQL en la nube.

mysqldump es un comando con decenas de opciones, para verlas todas utiliza la ayuda en línea que se proporciona a través de –help

mysqldump --help

Lo anterior muestra las posibles opciones específicas de la versión de MySQL que utilices así que pueden variar con respecto a la siguiente lista:

mysqldump OPCIONES MÁS COMUNES

Opción

Corto

Descripción

--add-drop-database

Añade la sentencia 'DROP DATABASE' antes de cada sentencia 'CREATE

DATABASE'

 

Añade la sentencia 'DROP TABLE' antes

--add-drop-table

de cada sentencia 'CREATE TABLE'

--all-databases

 

Respalda todas las tablas de todas las

-A

bases de datos.

--comments

-i

Añade comentarios en el archivo de respaldo. Esta opción está por defecto activada, para desactivar los

comentarios utiliza --skip-comments.

--compatible=nombre

 

Produce una salida más 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

 

Usa sentencias INSERT completas que

-c

incluyen nombres de columnas.

--create-options

Incluye todas las opciones específicas

Página7/17

Tema 4.- Copias de Seguridad con MySQL

   

de MySQL para la creación de tablas que se usan con la sentencia 'CREATE TABLE'.

--databases

-B

Permite respaldar una o más bases de datos. Después de la opción 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 opción las sentencias 'CREATE DATABASE' y 'USE'

antes de cada nueva base de datos.

--extended-insert

-e

Usa la sentencia 'INSERT' con el formato de múltiples registros con varias listas de 'VALUES'. Esto produce una salida más 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 opción se podrá

continuar.

--host=nombre

-h nom

Se realiza el respaldo de el servidor MySQL indicado por nombre, puede ser una dirección IP o un nombre de servidor válido. Si no se especifica

el default eslocalhost.

--ignore-table=bd.tabla

 

Si no se desea respaldar una tabla en específico se utiliza esta opción, es obligario indicar la base de datos un punto y después nombre de la tabla. Si son varias tablas las que se han de ignorar se usa esta opción múltiples veces. También puede usarse para

ignorar vistas.

--master-data

 

Si el respaldo viene de un servidor MySQL que actua como maestro en una esquema de replicación, el uso de esta opción es muy importante ya que incluira sentencias del tipo "CHANGE MASTER TO" que indican la posición en los archivos de bitácora binarios necesarios para que los servidores

esclavos se sincronicen adecuadamente.

--no-create-db

-n

Esta opción 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 opción esta por defecto activada, produce un vaciado rápido y totalmente compatible con otros servidores MySQL. Es un alias que activa las opciones-- add-drop-table, --create-options, --

extended-insert, entre otras.

Página8/17

Tema 4.- Copias de Seguridad con MySQL

--password[=pass]

-p[pass]

La contraseña para conectarse al servidor indicado en la opción --host. Si usas la opción corta p no debe haber un espacio. Es posible no indicar la contraseña y después de presionar la tecla intro se preguntará

por esta.

--port=num

-P num

Si servidor indicado en la opción -- host utiliza un puerto diferente al default del servicio mysql (3306) debe

de indicarse con esta opción.

--quick

-q

Va de la mano con la opción --single- transactionya 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

Opción 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 opción --skip-

quote-names

--routines

-R

Incluye en el respaldo rutinas almacenadas (procedimientos y funciones). Con esta función se incluyen las sentencias "CREATE PROCEDURE" Y "CREATE FUNCTION" que permiten re-crear completamente procedimientos almacenados y funciones. Esta opción NO esta por defecto enmysqldump 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 opción.

--single-transaction

 

Opción ú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 opción 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 opción es automática, 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

 

opción --host.

Página9/17

Tema 4.- Copias de Seguridad con MySQL

--verbose

-v

Modo verboso. Imprime información de lo que está haciendo el respaldo, usa

 

doble -v -v para modo aun más verboso.

--xml

-X

En vez de un respaldo por defecto formateado con sentencias SQL, esta opción ofrece una salida en un formato

XML bien formado.

Uso básico

Tres formas básicas de invocar mysqldump son posibles:

 

1) mysqldump [opciones] nombre_bd [nombre_tabla1 nombre_tabla2 respaldo.sql 2) mysqldump [opciones] --databases nombre_bd1 nombre_bd2 > respaldo.sql 3) mysqldump [opciones] --all-databases > respaldo.sql

]

>

1) respalda una sola base de datos, indicando su nombre, y opcionalmente una o más

tablas

de

la misma base

de datos.

Si

no se indican

tablas,

se respaldan

todas.

2) respalda una o más 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 adelante).

después para restaurar una base de datos (véase ejemplos más

Cómo hacer copias de seguridad de una base de datos MySQL con 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 versión instalada $ mysqldump --version mysqldump 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:

Página10/17

Tema 4.- Copias de Seguridad con MySQL

$ /usr/local/mysql/bin/mysqldump

Copia de seguridad básica

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_CONTRASEÑA por las credenciales que utilizas para acceder al servidor de base de datos:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Si por ejemplo el usuario es root, la contraseña también 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 contraseña como parte del comando, puedes reemplazar la opción --password=XX por -p. Al hacerlo, MySQL te pedirá que escribas la contraseña a mano cada vez que realices una copia de seguridad:

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

Enter password: *********

Recuperando una copia de seguridad

Las copias de seguridad sólo son útiles si se pueden recuperar fácilmente 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 información de la base de datos es el siguiente:

$ mysql --user=TU_USUARIO --password=TU_CONTRASEÑA base_de_datos< copia_seguridad.sql

Observa cómo 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 sería:

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

Copias de seguridad de más 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 opción --databases e indica el nombre de todas las bases de

datos separados por un espacio en blanco:

Página11/17

Tema 4.- Copias de Seguridad con MySQL

 

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

 

--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 opción --all-databases:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--all-databases > copia_seguridad.sql

Incluyendo solamente algunas tablas en la copia de seguridad

Por defecto, el comando mysqldump vuelca todas las tablas de la base de datos indicada. Para incluir solamente una o más tablas, indica sus nombres después del nombre de la base de datos:

# volcando una sola tabla

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

NOMBRE_BASE_DE_DATOS NOMBRE_TABLA > copia_seguridad.sql

# volcando tres tablas

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA NOMBRE_BASE_DE_DATOS NOMBRE_TABLA_1 NOMBRE_TABLA_2 NOMBRE_TABLA_3 > copia_seguridad.sql

Excluyendo algunas tablas de la copia de seguridad

Por defecto, el comando mysqldump vuelca todas las tablas de la base de datos indicada. Para no incluir en la copia de seguridad alguna tabla concreta, indícalo con la opción -- ignore-table, cuyo valor debe indicarse como NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA (si indicas solamente el nombre de la tabla, se producirá un error):

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--ignore-table=NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA

NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Si estás haciendo por ejemplo una copia de seguridad de una base de datos llamada tienda pero no quieres que se incluya una tabla llamada ventas, ejecuta el siguiente comando:

Tema 4.- Copias de Seguridad con MySQL

Para excluir varias tablas, indica sus nombres con otras tantas opciones --ignore-

table:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--ignore-table=NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA_1

--ignore-table=NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA_2

--ignore-table=NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA_3

NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Limitando el número de registros de cada tabla

Por defecto, el comando mysqldump vuelca todos los registros de todas las tablas. Si quieres filtrar previamente los registros, añade la opción --where, que permite indicar la condición de tipo WHERE que se añade a las consultas SELECT que se realizan para extraer todos los registros:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--where="edad > 18 AND edad < 65"

NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Si lo que te interesa es simplemente limitar el número de registros volcados para cada tabla, puedes utilizar la opción --where junto con el siguiente truco extraído del sitio StackOverflow:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--where="1 limit 1000"

NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

La opción --where="1 limit 1000" hace que sólo se extraigan los primeros 1.000 registros de cada tabla. Para ajustar este valor a tus necesidades, reemplaza el valor 1000 pero no cambies la primera parte (1 limit).

Volcando la estructura de las tablas pero no sus datos

Por defecto, el comando mysqldump vuelca tanto la estructura de las tablas como toda su información. Si sólo te interesa volcar la estructura de las tablas y columnas, utiliza la opción --no-data. Así podrás crear otra base de datos exactamente igual pero vacía:

Tema 4.- Copias de Seguridad con MySQL

Creando archivos con líneas más cortas

Por defecto, el comando mysqldump combina cientos de instrucciones INSERT individuales en una sola gran instrucción INSERT para insertar muchos registros a la vez:

INSERT INTO `NOMBRE_DE_TABLA`

VALUES (1, '

...

',

'

...

',

'

...

'),

(2, '

...

',

'

...

',

'

...

'),

(3, '

...

',

'

...

',

'

...

'),

(4, '

...

',

'

...

',

'

...

'),

(5, '

...

',

'

...

',

'

...

'),

(6, '

...

',

'

...

',

'

...

');

Este es el comportamiento recomendado en la mayoría de las situaciones, pero puede provocar errores con sistemas antiguos incapaces de procesar líneas de miles de bytes de longitud. Igualmente, puedes tener problemas con tu editor de textos al intentar abrir un archivo de copia de seguridad que contiene estas líneas tan largas.

Si este es tu caso, añade la opción --extended-insert=false para hacer que cada INSERT se ejecute con su propia instrucción:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--extended-insert=false NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Si abres ahora el archivo de la copia de seguridad, verás cómo ya no existen instrucciones INSERT múltiples:

INSERT INTO `NOMBRE_DE_TABLA` VALUES (1, '

...

',

'

...

',

'

...

');

INSERT INTO `NOMBRE_DE_TABLA` VALUES (2, '

...

',

'

...

',

'

...

');

INSERT INTO `NOMBRE_DE_TABLA` VALUES (3, '

...

',

'

...

',

'

...

');

INSERT INTO `NOMBRE_DE_TABLA` VALUES (4, '

...

',

'

...

',

'

...

');

INSERT INTO `NOMBRE_DE_TABLA` VALUES (5, '

...

',

'

...

',

'

...

');

INSERT INTO `NOMBRE_DE_TABLA` VALUES (6, '

...

',

'

...

',

'

...

');

El principal problema de esta opción es que la recuperación de datos es varios órdenes de magnitud más lenta que cuando se combinan varios registros en una única instrucción INSERT.

Evitando el bloqueo de las tablas

Por defecto, el comando mysqldump bloquea las tablas de la base de datos antes de hacer el volcado de la información. Este es el comportamiento recomendado para evitar inconsistencias al recuperar la información.

Página14/17

Tema 4.- Copias de Seguridad con MySQL

Sin embargo, si estás haciendo una copia de seguridad del servidor de producción y tiene mucha actividad, este comportamiento puede ser inaceptable. Para evitarlo,

añade la opción --lock-tables=false:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--lock-tables=false NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

Creando bases de datos con datos binarios

Por defecto, el comando mysqldump vuelca toda la información tal y como se almacena en la base de datos. Si guardas archivos binarios (como imágenes o archivos PDF) en alguna tabla, pueden producirse errores al procesar después la información binaria o al recuperarla.

Para evitar estos problemas, puedes forzar a que MySQL convierta la información binaria a un formato hexadecimal más seguro para transmitirlo y recuperarlo. Para ello, añade la opción --hex-blob:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--hex-blob NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

El principal problema de esta opción es que puede aumentar mucho el tamaño del archivo de la copia de seguridad.

Cambiando el formato de salida

Por defecto, el comando mysqldump hace un volcado de información en formato SQL. Si prefieres utilizar el formato XML, añade la opción --xml:

$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEÑA

--xml NOMBRE_BASE_DE_DATOS > copia_seguridad.sql

El contenido del archivo generado será algo como lo siguiente:

<?xml version="1.0"?> <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <database name="NOMBRE_BASE_DE_DATOS">

<table_structure name="XXX"> <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" />

<!-- </table_structure> <table_data name="XXX"> <row> <field name="ID">1</field>

...

-->

Página15/17

Tema 4.- Copias de Seguridad con MySQL

<!--

...

</row>

</table_data>

</database>

</mysqldump>

-->

Como utilizar mysqldump para crear una copia de seguridad de su base de datos con Windows

  • 1. Abra un símbolo del sistema de Windows.

Haga clic en Inicio -> Ejecutar

Escriba "cmd" en el cuadro de diálogo y haga clic en el botón "OK".

  • 2. Cambie el directorio a la siguiente para acceder a la utilidad mysqldump.

cd C: \Program Files\MySQL\MySQL Server 5.5\bin

  • 3. Crear un volcado de la base de datos mysql actual o una mesa :

Ejecute el programa mysqldump utilizando los siguientes argumentos:

Mysqldump -u [nombre de usuario] -p [contraseña] -h [host] [nombre de la base] > C: \ [nombre de archivo] . sql

  • 4. Si ha facilitado todos los argumentos correctamente, el programa se conectará al servidor de mysql actual y crear un volcado de toda la base de datos en el directorio que ha especificado en el directorio C: \. No hay ningún mensaje que indique la descarga se ha completado, el cursor de texto simplemente pasar a la siguiente línea.

He aquí un ejemplo de la sintaxis de la línea de comandos:

Tema 4.- Copias de Seguridad con MySQL <!-- ... </row> </table_data> </database> </mysqldump> --> Como utilizar

Copias de seguridad incrementales

Las copias de seguridad completas son muy fáciles de restaurar. Sin embargo, si una BD es grande será muy lenta de hacer, interrumpirá el trabajo del SGBD y el espacio en disco se agotará rápidamente.

Página16/17

Tema 4.- Copias de Seguridad con MySQL

Las copias de seguridad incrementales permiten almacenar solamente los cambios hechos desde un cierto momento. Por ejemplo, se podría hacer una copia completa el día 1 de cada mes y luego al final de cada día, una incremental.

Si hubiera un fallo, por ejemplo, el día 17, se necesitarán aplicar las copias en orden empezando por la completa seguida de los 16 incrementos. Esto significa que la restauración de copias incrementales es más pesada de hacer que las completas.

Para poder hacer copias incrementales, MySQL debe haber sido arrancado con la opción correcta.

mysqld --log-bin

mysql -u root -p

mysql> update ...

#Esto obliga a volcar los nuevos logs que

#se hayan podido generar

mysqladmin -u root -p flush-logs

Usando los comandos mysqlbinlog podemos volcar cualquier archivo de log en un fichero mysql.

Página17/17