Las bases de datos relacionales son un requisito indispensable para el funcionamiento de muchos sistemas, como en el caso de gestores de contenido, tiendas en línea, etc.; y hacer una copia de seguridad de su contenido al igual que su administración es una tarea un poco especial. Sistemas como Debian y Ubuntu por defecto tienen una herramienta llamada mysqldump que nos ayudará en esta tarea. Se va a detallar cuál es la mejor forma de hacerlo, porque no existe una sola forma correcta a pesar de usarse una sola herramienta comúnmente.
Forma estándar de hacer copias de seguridad de las DDBB
Lo normal es usar el siguiente comando para hacer una copia de una sola base de datos:
mysqldump -uUsuario -p base_de_datos > dump-archivo.sql
Y para importar las bases de datos:
mysql -uUsuario -p base_de_datos < dump-archivo.sql
No es una manera del todo mala, sino que hacerlo así puede tener errores con la codificación de caracteres de los datos.
La mejor forma de hacer copias de seguridad de las DDBB
Primero para hacer una copia de forma segura en cuanto a codificación de caracteres y eficiente en cuanto a uso de CPU y bloqueos:
mysqldump -uUsuario -p --single-transaction --quick --skip-lock-tables base_de_datos -r archivo-dump-utf8.sql
Los parámetros que se usaron fueron:
--single-transaction
, con esta opción se vuelca la base de datos de una forma consistente, útil únicamente con bases InnoDB.
--quick
, con esta opción se exporta fila por fila en lugar de exportar todo el conjunto de datos de una sola vez. Bastante útil a la hora de volcar grandes bases de datos. Uno de los beneficios es el menor uso de recursos al ejecutar el comando.
--skip-lock-tables
, si usamos esta opción no bloqueamos ninguna tabla al momento de volcar la base, y así evitamos interrupciones en entornos de producción.
-r
, si usamos este parámetro la salida se vuelca directamente a un archivo preservando la codificación de los datos.
Importando base de datos de forma segura
En este último caso hay dos formas de importar archivos de volcado.
Opción 1.
La opción recomendada con el Shell de MySQL en una Terminal, debemos estar en el mismo directorio que el archivo.
Abrimos el Shell de MySQL:
mysql -uUsuario -p --default-character-set=utf8mb4 base_de_datos
Importamos la base de datos con el archivo SQL como fuente:
SET names 'utf8'
SOURCE archivo-dump-utf8.sql;
Opción 2.
Una opción alternativa de una línea en la Terminal:
mysql --default-character-set=utf8 -uUsuario base_de_datos < archivo-dump-utf8.sql
Conclusiones
Las copias de seguridad son muy importantes cuando se trata de base de datos, ya que no estamos exentos de errores de discos, robo de datos, pérdida de datos, errores de software que provocan corrupción de datos, etc.; y la prevención es una buena cura. En lo personal muchas veces he tenido problemas en producción y al no tener una costumbre de hacer Backups o por ahorrarme unos cuantos dólares en estos servicios me tomaba horas volver a recuperar la funcionalidad de sitios web, incluso llegue a usar archive.org para recuperar algunos datos. Otra cosa también importante es la forma de hacer las cosas, cuando se trata de datos las codificaciones son un dolor de cabeza, pero una vez con un mínimo de conocimiento o al menos recordando ciertos artículos en Internet estos problemas son menos frecuentes.
Fuentes: