ATENCIÓN AL CLIENTE: +34 923 199 148

Cómo programar copias de seguridad cada hora en MySql

Normalmente tendréis un hosting que haga una o dos copias de seguridad diarias de vuestros contenidos. Pero hay casos en los que una web (imaginad una tienda online WordPress + WooCommerce con mucho volumen) o una plataforma de formación online (imaginad un Moodle con muchos estudiantes) necesitan una frecuencia de copias de seguridad mayor.

En nuestro caso, utilizamos proveedores de hosting que hacen entre 1 y 2 copias de seguridad diarias, pero tenemos clientes que cumplen con las condiciones para aumentar la frecuencia de sus copias de seguridad.

Insisto mucho siempre en la importancia de hacer un buen mantenimiento tanto de WordPress como de Moodle, y ese buen mantenimiento, entre otras cosas, implica que tengamos una buena política de copias de seguridad.

Escenario

Supongamos que tenemos un WordPress + WooCommerce con un volumen alto de pedidos (entiendo por alto, que haya 1 pedido / hora o más). Tenemos un hosting que hace 1 backup diario, y las bases de datos, lógicamente, son MySql o MariaDB.

Entonces la forma de asegurar los datos de nuestro WooCommerce, va a ser programar un script en UNIX (que veremos a continuación) con las siguientes condiciones / requisitos:

  • Debe hacer copia cada hora (lo conectaremos al Cron del servidor para ello)
  • Debe borrar los backups que tengan más de 24 horas de antigüedad (porque al hacer el hosting 1 backup cada 24 h, no necesitamos los más antiguos, ya que en cada snapshot de los backups de los días previos, estarán nuestras 24 copias de seguridad)

Script que hace copias de seguridad cada hora para Linux / Unix

# Nombre base de datos y usuario
DB_NAME="1234" 
DB_USER="1234" 
DB_PASS="1234"

# Directorio donde se guardarán las copias de seguridad
BACKUP_DIR="/home/usuario_que_sea/_csegs"

# Fecha y hora actual
NOW=$(date +"%Y-%m-%d_%H%M")

# Nombre del archivo de copia de seguridad
BACKUP_FILE="$BACKUP_DIR/cseg_$NOW.sql"

# Crear copia de seguridad
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME --routines --single-transaction > $BACKUP_FILE

zip -r $BACKUP_FILE.zip $BACKUP_FILE
rm $BACKUP_FILE

# Encontrar y eliminar archivos en el directorio de copias de más de 24 horas de antigüedad
find $BACKUP_DIR -name "cseg*.sql" -type f -mtime +1 -exec rm {} \;

Hay algún detallito que podéis ver en el Script como:

  • La copia se comprime en ZIP y luego se borra el fichero sin comprimir (para no ocupar espacio de más)
  • En la parte de mysqldump usamos la opción --single-transaction que hace que cuando se está haciendo el backup, no se bloquee el acceso a la base de datos, lo cual implicaría una caída momentánea de la web
  • En la parte de mysqldump siempre usamos la opción --routines por si acaso se ha programado algún procedimiento almacenado (adicional al WordPress, algo hecho a medida)

Veréis que el script graba la copia de seguridad en un directorio. Debéis crearlo previamente para que funcione.

¿Cómo programamos el script? Con el Cron

Tenemos que hacer una llamada al comando del sistema bash para que ejecute el script y programarlo cada hora. Esa configuración ya dependerá de cada uno de vuestros hosting. Aquí os dejo una captura de pantalla de como queda en Cpanel, donde se hace un backup cada hora:

Quizá te interese...

Deja un comentario...

Suscribirme
Notificación de
guest
0 Comentarios
Comentarios en línea
Ver todos los comentarios