Cuando se realizan copias de seguridad de bases de datos MySQL, resulta habitual utilizar el comando mysqldump sin opciones. Sin embargo, este comando tiene muchas opciones interesantes que permiten realizar copias de seguridad avanzadas.
Por defecto, el comando mysqldump genera una copia de la estructura sql todas las tablas de la base de datos indicada, en un archivo de texto sql. Para incluir solamente una o más tablas, indica sus nombres después del nombre de la base de datos.
Desde la ventana de terminal en el directorio de mysql:
# Copia de seguriad de una sola tabla $ mysqldump –user=usuario --password=clave basededatos tabla > copia_seguridad.sql
# Copia de seguriad de tres tablas $ mysqldump –user=usuario --password=clave basededatos tabla1 tabla2 tabla3 > copia_seguridad.sqlEjemplos de 1 o 3 tablas.
1. Excluyendo algunas tablas de la copia de seguridad
Para no incluir en la copia de seguridad alguna tabla concreta, debemos indicarlo con la opción --ignore-table, cuyo valor debe indicarse
Si está haciendo por ejemplo una copia de seguridad de una base de datos llamada comercio pero no quieres que se incluya una tabla llamada ventas, ejecuta el siguiente comando:
$ mysqldump --user=usuario--password=clave --ignore-table=comercio.ventas comercio > copia_seguridad.sqlEs decir copiar toda la base de datos comercio menos la tabla ventas. Si queremos excluir varias tablas deberemos utilizar el siguiente comando:
$ mysqldump --user=usuario --password=clave --ignore-table=comercio.ventas --ignore-table=comercio.productos --ignore-table=comercio.precios comercio > copia_seguridad.sql(Para excluir varias tablas, indica sus nombres con otras tantas opciones --ignore-table)
2. Limitando el número de registros de cada tabla
Por defecto, el comando mysqldump copiara 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=usuario --password=clave --where="edad > 18 AND edad < 65" basededatos > copia_seguridad.sqlSi queremos extraer solo algunos registros de la base de datos por ejemplo los primeros 500
$ mysqldump --user=usuario –password=clave --where="1 limit 500" basededatos > copia_seguridad.sqlSe extraerían con limite en 500.
3. Copiar solo 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:
$ mysqldump --user=usuario --password=clave --no-data basededatos > copia_seguridad.sqlNormalmente cuando se generan los insert se agrupan en una sola sentencia para ahorrar líneas de código de la siguiente manera:
INSERT INTO tabla VALUES (1,'nombre1'), (2, 'nombre2'), (3, 'nombre3');Este es el comportamiento puede provocar errores con sistemas antiguos incapaces de procesar líneas de extensa 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 nos enfrentamos a este caso, podemos añadirla opción --extended-insert=false para hacer que cada INSERT se ejecute con su propia instrucción:
$ mysqldump --user=usuario –password=clave --extended-insert=false basededatos > copia_seguridad.sqlEl resultado será el siguiente:
INSERT INTO tabla VALUES (1,'nombre1'); INSERT INTO tabla VALUES (2, 'nombre2'); INSERT INTO tabla VALUES (3, 'nombre3');