Práctica regular de copia de seguridad de la base de datos MySQL

1. Introducción a los antecedentes

Tal vez encuentre que este sitio se ha establecido durante mucho tiempo, pero los diversos tipos de visitas a este sitio siempre son muy bajos. Probablemente hay dos razones para esto. Una es porque después de que el sitio se actualizó a 2.0, todos los artículos los datos de acceso no tienen sincronización (no solo artículos, todos los datos están sincronizados, como datos de usuario, etc., tal vez estos datos no sean importantes); otra razón es que se ejecutó una declaración de actualización hace unos diez días (el cliente MySQL predeterminado The la transacción se envía automáticamente), y las visitas de todos los artículos se borran. Los datos de visitas de toda la estación del sistema también se perfeccionan y se agregan en el reciente 2.0 de este sitio (dentro de un mes). Este último es causado por su propia errores, por lo que este artículo es principalmente para lograr una copia de seguridad periódica de una base de datos MySQL, lo que puede considerarse que hace que los datos sean más seguros (tal vez el sitio sea pirateado y los datos se pierdan).

2. Guión de copia de seguridad

La copia de seguridad regular de la base de datos MySQL implementada en este artículo es principalmente para lograr un alto grado de ajuste con el individuo. Si existen requisitos muy altos para los datos, debe realizarse mediante una copia de seguridad o sincronización en tiempo real (no es el propósito). de esta práctica), escriba el archivo de secuencia de comandos de copia de seguridad en forma de secuencia de comandos de shell, agréguelo a la tarea programada del sistema y ejecútelo automáticamente. Consulte el archivo de secuencia de comandos de copia de seguridad (denominado backup.sh) como se muestra a continuación.

#!/bin/bash

#
# Copyright (c) 2023 by chendd 88911006
# 简单备份MySQL数据库脚本
# All rights reserved.

#数据库IP
MYSQL_HOST="localhost"
# 数据库名称
MYSQL_DATABASE="chendd-blog"
# 数据库用户名
MYSQL_USERNAME="root"
# 数据库密码
MYSQL_PASSWORD="root"
# 备份根路径
BACKUP_DIR=$(cd `dirname $0`; pwd)
# 年月日时分秒
DATETIME=$(date +%Y%m%d_%H%M%S)

# 如果不指定jdk则使用默认
if [[ -n "$MYSQL_HOME" ]] && [[ -x "$MYSQL_HOME/bin/mysqldump" ]]; then
    MYSQL_EXE="$MYSQL_HOME/bin/mysqldump"
elif type -p mysqldump > /dev/null 2>&1; then
    MYSQL_EXE=$(type -p mysqldump)
elif [[ -x "/app/mysql/bin/mysqldump" ]];  then
    MYSQL_EXE="/app/mysql/bin/mysqldump"
else
    echo "$(date "+%Y-%m-%d %H:%M:%S") ERROR Unable to find MySQL mysqldump" >> ${BACKUP_DIR}/backup.log
    exit 1
fi

#输出一个空行
echo " " >> ${BACKUP_DIR}/backup.log
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始执行批次为 [$DATETIME] 的备份" >> ${BACKUP_DIR}/backup.log

# 备份命令
COMMAND="$MYSQL_EXE --host=$MYSQL_HOST --user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD $MYSQL_DATABASE > $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql"
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始备份数据库,命令为:$COMMAND" >> ${BACKUP_DIR}/backup.log
# 执行备份语句
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束备份" >> ${BACKUP_DIR}/backup.log
/bin/sh -c "$COMMAND"
# 压缩命令(保留压缩原sql文件)
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 开始压缩数据库文件" >> ${BACKUP_DIR}/backup.log
gzip -c $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql > $BACKUP_DIR/backup_${MYSQL_DATABASE}_${DATETIME}.sql.gz
echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束压缩" >> ${BACKUP_DIR}/backup.log

#删除10天之前的备份
find ${BACKUP_DIR} -name backup_"*.sql" -type f -mtime +10 -exec rm -rf {} \; >> ${BACKUP_DIR}/backup.log
find ${BACKUP_DIR} -name backup_"*.sql.gz" -type f -mtime +10 -exec rm -rf {} \; >> ${BACKUP_DIR}/backup.log

echo "$(date "+%Y-%m-%d %H:%M:%S") INFO 结束执行批次为 [$DATETIME] 的备份" >> ${BACKUP_DIR}/backup.log

3. Introducción a los scripts de copia de seguridad

(1) Asumiendo que el comando del script es "bachup.sh", se debe otorgar el permiso del archivo ejecutable;

(2) Búsqueda limitada de la variable de entorno MYSQL_HOME; si no se encuentra, la ruta de instalación predeterminada de MySQL es /app/mysql;

(3) Los parámetros configurados incluyen la IP del servidor de la base de datos MySQL, el nombre de usuario de la base de datos, la contraseña de la base de datos, el nombre de la base de datos y la ruta del archivo de copia de seguridad Estos parámetros deben ajustarse según sea necesario;

(4) Después de ejecutar cada secuencia de comandos clave, envíe algunas indicaciones al archivo de registro de comandos "backup.log", el formato es: fecha y hora + nivel de registro + información de descripción; hay indicaciones para cada ejecución inicial y final;

(5) Solo se realiza una copia de seguridad de una base de datos de forma predeterminada, y este script no es adecuado para realizar copias de seguridad de varias bases de datos;

(6) El formato del archivo sql de la copia de seguridad generado se llama "backup_database nombre_script fecha de ejecución_script tiempo de ejecución.sql";

(7) Comprima el archivo sql de copia de seguridad producido en un archivo de paquete comprimido de "backup_base de datos nombre_script ejecución fecha_script ejecución time.sql.gz". Después de comprimir el archivo, el archivo de formato sql original no se eliminará de forma predeterminada;

(8) Después de cada ejecución de acuerdo con el formato de nombre del archivo, se eliminarán los archivos con más de 10 días de antigüedad. En la práctica, se ha verificado que los archivos de copia de seguridad se eliminaron hace 1 minuto y la frecuencia de activación de la tarea programada es de 1 minuto. ;

4. Ejecute el script regularmente

# 查看定时任务列表:每天临时0:30分触发
crontab -l
# 增加定时任务:
echo '30 0 0 * *  sh /app/backup.sh' >> /var/spool/cron/root
#刷新定时任务
service crond reload

5. Ejecución de resultados

(ejecutar el script manualmente)

(registro de ejecución del script)

(archivo de ejecución de script)

Descarga de secuencias de comandos: copia de seguridad.zip

La dirección original es la dirección del blog personal, consulte: https://www.chendd.cn/blog/article/1637269874421841921.html

Supongo que te gusta

Origin blog.csdn.net/haiyangyiba/article/details/129652227
Recomendado
Clasificación