5.3. Copias de seguridad

Ningún sistema es perfecto ni está a salvo de errores humanos, cortes en el suministro de la corriente eléctrica, desperfectos en el hardware o errores de software; así que una labor más que recomendable del administrador del servidor de bases de datos es realizar copias de seguridad y diseñar un plan de contingencia. Se deben hacer ensayos del plan para asegurar su buen funcionamiento y, si se descubren anomalías, realizar los ajustes necesarios.

No existe una receta universal que nos indique cómo llevar nuestras copias de seguridad de datos. Cada administrador debe diseñar el de su sistema de acuerdo a sus necesidades, recursos, riesgos y el valor de la información.

MySQL ofrece varias alternativas de copia de seguridad de la información. La primera que podemos mencionar consiste simplemente en copiar los archivos de datos. Efectivamente, es una opción válida y sencilla.

En primera instancia son necesarios dos requisitos para llevarla a cabo:

•    Conocer la ubicación y estructura del directorio de datos.
•    Parar el servicio MySQL mientras se realiza la copia.

En cuanto a la ubicación y estructura del directorio, recordemos que la distribución de MySQL ubica el directorio de datos en /usr/local/mysql/var, las distribuciones GNU/Linux basadas en paquetes como DEB o RPM ubican, por lo general, los datos en /var/lib/mysql.

Si por algún motivo no encontramos el directorio de datos, podemos consultarlo a MySQL. El comando show variables nos muestra todas las variables disponibles, basta realizar un filtro con la clausula like:

mysql> show variables like ´datadir´;
+---------------+-----------------+
| Variable_name |     Value       |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

Una vez ubicados los archivos, detenemos la ejecución del servidor: un modo sencillo de asegurarnos de que la base de datos no será modificada mientras terminamos la copia:

$ mysqladmin -u root -p shutdown

Finalmente, copiamos el directorio completo con todas las bases de datos:

$ cp -r /var/lib/mysql/ /algun_dir/

Por supuesto podemos elegir otras formas de copiarlo o comprimirlo, de acuerdo a nuestras preferencias y necesidades.

$ tar czf mysql-backup.tar.gz /var/lib/mysql

Si queremos copiar sólo una base de datos, copiamos el directorio con el mismo nombre de la base de datos:

$ cp -r /var/lib/mysql/demo/ /algun_dir/respaldo_demo/

También es posible hacer copia de seguridad de una sola tabla.

$ cp -r /var/lib/mysql/demo/productos.* / algun_dir/backup_demo/

Como podemos observar, la organización de la base de datos en MySQL es muy simple:

•    Todas las bases de datos se almacenan en un directorio, llamado el directorio de datos(datadir).

•    Cada base de datos se almacena como un subdirectorio del directorio de datos.

•    Cada tabla se almacena en un archivo, acompañada de otros archivos auxiliares con el mismo nombre y diferente extensión.

El problema de este mecanismo es que debemos detener el servicio de bases de datos mientras realizamos el respaldo.