Dos trucos rápidos para MySQL: backup y restore desde consola

Dos trucos rápidos para MySQL: backup y restore desde consola

Habituado a utilizar prácticamente todos los días servidores, me doy cuenta que tengo una memoria algo mala, y que a veces soy incapaz de recordar dónde estaba tal o cual fichero de configuración (los olvidos son directamente proporcionales a la diversidad de los sistema operativos con que uno trabaja: Debian, Archlinux, Windows, etc). Suelo ir con mi chuleta de las órdenes más frecuentes, pero en el caso de no tenerla a mano, o cuando le está metiendo mucha prisa a uno, he decidido escribir una especie de receta-recordatorio.

Hacer copia de seguridad de la base de datos

set FECHA=`date '+%Y_%m_%d'`
echo $FECHA
mysqldump -h localhost -u mi_usuario -p base_datos > /home/rafalinux/backup/mi_base_$FECHA.sql

Como se puede ver, he hecho varias cosas:

  • he definido una variable de entorno, que me va a servir para clasificar y ordenar por fecha de creación el backup que he hecho;
  • para comprobar que la variable está bien creada, hago un echo;
  • finalmente, pongo la orden de creación de la  base de datos, que en este ejemplo es mi_base;
  • al hacer la copia de seguridad, me saldrá algo como mi_base_2011_10_30.sql

Uno se podría preguntar que por qué no utilizo Phpmyadmin y otro front-end o interfaz gráfica. Sí lo utilizo, pero en ocasiones estoy trabajando directamente con el servidor, sin interfaz gráfica, por lo que no tengo más remedio que administrar todo el servidor mediante órdenes de consola.

Además, Phpmyadmin y otros gestores sólo permiten un máximo de tamaño en el archivo SQL, así que no hay más remedio que hacer Backups y Restores de manera manual.

Vi hace tiempo un truco interesante en LuAuf que yo no suelo hacer, pero que es algo que debería, como medida de precuación: bloquear las tablas antes de hacer el volcado:

#Desde el shell del cliente mysql:
#Vuelco todos los datos de cache a disco, cierro y bloqueo todas las tablas
mysql> FLUSH TABLES WITH READ LOCK;

#Ejecuto mysqldump para hacer el backup
mysqldump -u usuario -p base_de_datos > backup.sql

#Desde el shell del cliente mysql:
#Desbloqueo las tablas
mysql> UNLOCK TABLES;

Restaurar la copia de seguridad

La orden que hay que ejecutar es similar, pero no igual. Para esto hay varias maneras, pero yo voy a poner solamente la que utilizo, porque me es más cómoda:

mysql -u usuario -p base_de_datos < backup.sql

Ahora vemos cómo se vuelca el contenido de backup.sql en base_de_datos.