GNU/Linux >> Tutoriales Linux >  >> Linux

Copias de seguridad de bases de datos MySQL con secuencias de comandos

Resumen

Este artículo describe un script de copia de seguridad de la base de datos MySQL que le permite implementar una copia de seguridad comprimida y con sello de fecha automática diaria (o más frecuente) de sus bases de datos MySQL. La ventaja de usar este script es que hará una copia de seguridad de todas las bases de datos, las almacenará en un directorio (/data/db-backups) y registrará su actividad en un archivo (/logs/db-backup) para auditar y revisar en caso de cualquier problema.

Idealmente, la secuencia de comandos debe automatizarse con CRON para que, al menos todos los días, se realice una copia de seguridad completa de cada base de datos. Esto le permitirá tener cierto grado de capacidad de recuperación en caso de errores en su base de datos o asistirá en la fácil migración de su(s) base(s) de datos a otro sistema. Al igual que todos los procesos automatizados, una vez instalado, debe continuar para siempre realizando copias de seguridad, por lo que deberá asegurarse de que se eliminen las copias de seguridad antiguas para que sus discos no se llenen.

El guión

El script es un script de shell BASH simple y limpio probado en CentOS Linux Distribution pero capaz de ejecutarse en otras variantes de Linux con poca o ninguna modificación.

  1. Corte y pegue el siguiente texto en un editor y realice los cambios necesarios para mejorar o reducir la funcionalidad.
#!/bin/bash# mysql-backup.sh# utilice mysqldump para volcar la base de datos y comprímala sobre la marcha en una partición montada#BACKUP_DIR="/data/db-backups"mkdir -p $BACKUP_DIRchmod 777 $BACKUP_DIR ##SERIAL="`fecha +%Y%m%d-%H%M%S`"#=====================================# Funciones de registro#función Inicio de registro{echo "======Inicio de registro =========">> $LFecho "Hora:`fecha`">> $LFecho " ">> $LF}función LogEnd{echo " ">> $LFecho "Hora:`fecha`">> $LFecho "======Log End =========">> $LF}#====================================##función GetDBList{echo " Llamando a GetDBList()">> $LFmysqlshow |grep "|"| tr -d ' '|tr -d '|'| egrep -v Bases de datos> $DBLIST}#====================================##función DoBackup {echo "Llamando a DoBackup()">> $LFDBFILE=$BACKUP_DIR/db-$DB-$SERIAL.sqlecho "Host [$H]">> $LFecho "Archivo DB [$DBFILE]">> $LFif [ - a $DBFILE ]thenmv $DBFILE $DBFILE.`date '+%M%S'`fiecho "Dumping ${DB}">> $LFmysqldump -B ${DB} --add-drop-database --add-drop -table>> ${DBFILE}echo "¡Comprimiendo archivo!">> $LFgzip ${DBFILE}echo "¡Listo!">> $LF}FILE_DATE=`fecha '+%Y-%m-%d'`LF_DIR=/logs/db-backupLF=$LF_DIR/db-backup-$FILE_DATE.logmkdir -p $LF_DIRchmod 777 $LF_DIRtouch $LFchmod 664 $LFDBLIST=/tmp/dblist-$FILE_DATE.listLogStart#=====================================## Código PRINCIPAL StartGetDBListwhile lee linedoecho "Copia de seguridad:$line"H="localhost"DB=$lineDoBackupdone <$DBLISTecho "Todas las copias de seguridad completadas">> $LFLogEnd## EOF

Prueba de la copia de seguridad

  1. Para verificar que el script de copia de seguridad funciona, primero ejecute el comando de copia de seguridad de la siguiente manera:
    /usr/local/bin/mysql-backups.sh
  2. Luego, realice una lista de directorios de /data/db-backup directorio creado por la secuencia de comandos, debería ver algunos archivos, cada uno de los cuales representa su base de datos comprimida y respaldada. raíz 510 5 de marzo 15:21 db-information_schema-20140305-152103.sql.gz-rw-r--r-- 1 raíz raíz 526 5 de marzo 15:22 db-information_schema-20140305-152229.sql.gz-rw- r--r-- 1 raíz raíz 142122 5 de marzo 15:21 db-mysql-20140305-152103.sql.gz-rw-r--r-- 1 raíz raíz 142283 5 de marzo 15:22 db-mysql-20140305- 152229.sql.gz....[raíz@suservidor]#

Automatizando el Script

El script debe colocarse en un directorio llamado /usr/local/bin . Este directorio está reservado específicamente para los scripts aplicables del sistema escritos por el usuario.

El script debe ser ejecutable por el usuario root, use el siguiente comando para marcar el archivo como ejecutable:

"chmod 744 /usr/local/bin/mysql-backup.sh"

Para automatizar la ejecución del script usaremos la aplicación CRON, por lo que agregaremos una línea a nuestro crontab usando el comando "crontab -e" , aparecerá un editor y agregaremos una línea de la siguiente manera:

30 22 * ​​* * /usr/local/bin/mysql-backups.sh> /dev/null 2>&1

Básicamente, esto permitirá que el script se ejecute a las 10:30 p. m. todos los días. También ocultará cualquier salida del programa a medida que el programa se registra en el disco.

Recuperación

Para recuperar una copia de seguridad, use gunzip para descomprimir el archivo y luego use mysql

Este es un ejemplo típico de lo que necesita ejecutar:

cd /data/db-backupsgunzip db-mybigdatabase-20140305-152229.sql.gzmysql  

Advertencia:tenga mucho cuidado con lo que está haciendo, ya que sobrescribirá su base de datos si comete un error.

¿Hacia dónde desde aquí?

Si está haciendo una copia de seguridad de su servidor, considere copiar automáticamente los archivos a otro servidor y recuperarlos automáticamente, esto le permite tener una copia de producción de bases de datos seleccionadas para fines internos de prueba y auditoría.


Linux
  1. Preguntas frecuentes sobre la implementación de MySQL

  2. Optimizar la base de datos MySQL

  3. Cómo copiar una base de datos MySQL

  4. Mejorar el almacenamiento en caché de la base de datos MySQL

  5. Cómo crear una base de datos en MySQL con MySQL Workbench

PHP MySQL Seleccionar datos

Listar tablas en una base de datos MySQL

Cómo hacer una copia de seguridad de la base de datos de WordPress a través de MySQL

Servidor de base de datos MySQL

Cómo crear una base de datos en MySQL

Descripción general de MySQL