martes, 10 de noviembre de 2015

Hacer copias de seguridad de una base de datos MySQL con mysqldump en Linux

Todos sabemos que las copias de seguridad son muy importantes dentro del ámbito de la administración de sistemas.

Como todos sabéis, si ocurre una catástrofe y no tenemos copias de seguridad, podremos perder gran cantidad de información valiosa sin posibilidad de recuperación. Además de provocar que las configuraciones se vean afectadas y no haya posibilidad de restaurar nada del sistema.

Ya hablamos de hacer copias de seguridad de un servidor completo, pero como esto tiene un gasto computacional alto y no se lleva a cabo con mucha frecuencia, vamos a ver como hacer copias de la base de datos de MySQL.

La base de datos es un objeto delicado, que cambia constantemente, por lo que es necesario que se hagan copias de seguridad de ella con frecuencia.

Para realizar esta tarea, la suite de MySQL incorpora el comando mysqldump. Veamos como utilizarlo para realizar las copias.

Comandos Mysqldump

Como ya dijimos arriba, mysqldump está integrado en el paquete de instalación del servidor MySQL.
Recordemos que MySQL se suele utilizar para bases de datos de aplicaciones web, por lo que es una aplicación crítica que debe de estar protegida en caso de fallos.

Para comprobar que efectivamente tenemos instalado mysqldump usamos el siguiente comando:
$ mysqldump
 
# para comprobar la versión instalada
$ mysqldump --version
mysqldump  Ver 11.XX Distrib 6.X.XX
Si os apareciera el error "command not found", es probable que la instalación de MySQL no se haya completado de forma correcta. No obstante podéis probar usando la ruta exacta donde se encuentra el script de este comando:
$ /usr/local/mysql/bin/mysqldump

COPIA DE SEGURIDAD BÁSICA

Para realizar un copia completa de una base de datos determinada debemos usar el siguiente comando:
$ mysqldump --user=MI_USUARIO --password=MI_PASSWORD NOMBRE_BASE_DE_DATOS > backup.sql
En caso de que no queráis poner la clave en el propio comando por motivos de seguridad podéis pasar por alto la opción --password y sustituirla por -p. Con esto nos pedirá la contraseña cuando se vaya a ejecutar el comando:

$ mysqldump --user=root -p my_bd > backup.sql
Enter password: *********
Recordamos que estos comandos los debe ejecutar un usuario con permisos de lectura, escritura y ejecución en la base de datos. En nuestro caso hemos usado root que es el usuario administrador de la base de datos con permisos globales.

COPIAS DE SEGURIDAD DE MÁS DE UNA BASE DE DATOS

Aunque de forma normal mysqldump se utiliza para hacer copia de seguridad de una base de datos, es probable que queramos salvar varias o todas las bases de datos de nuestro servidor.

Para ello tenemos la opción --databases y le indicamos el nombre de las bases de datos que queremos salvar:
$ mysqldump --user=MI_USUARIO --password=MI_PASSWORD
            --databases NOMBRE_BASE_DE_DATOS_1 NOMBRE_BASE_DE_DATOS_2
                        NOMBRE_BASE_DE_DATOS_3 > backup.sql
Si lo que queremos es realizar una copia de seguridad de todas las bases de datos, debemos usar la opción --all-databases:
$ mysqldump --user=MI_USUARIO --password=MI_PASSWORD
            --all-databases > backup.sql

RECUPERAR COPIA DE SEGURIDAD

En caso de que queramos recuperar una copia de seguridad de nuestra base de datos, el comando para hacerlo es el siguiente:
$ mysql --user=MI_USUARIO --password=MI_PASSWORD < backup.sql
Aquí se utiliza directamente mysql como comando y no mysqldump como usamos anteriormente. Tampoco es necesario especificar el nombre de la base de datos que se está recuperando puesto que esa información ya la tiene el fichero .sql
En cuanto a este comando, debéis recordar que al ejecutarlo se borra la base de datos original y todos sus datos y son machacados por la información del fichero a restaurar.

A veces, cuando se realiza una copia de seguridad de una base de datos con una versión antigua de MySQL, y se restaura a un servidor con una versión moderna; pueden llegar a haber errores.
Para evitar dichos errores se puede usar la opción --skipt-opt para saltar algunas opciones no compatibles.
$ mysqldump --user=MI_USUARIO --password=MI_PASSWORD
            --skip-opt NOMBRE_BASE_DE_DATOS > backup.sql
Saludos curiosos.

No hay comentarios:

Install Drupal 8 in CentOS

Drupal is an open source, flexible, highly scalable and secure Content Management System (CMS) which allows users to easily build and create...