Skip to content

MySQL数据库备份方案

约 369 字大约 1 分钟

数据库MySQL备份

2025-11-06

通过shell脚本,每天定时全量备份mysql数据库数据。并记录备份操作日志。

MySQL数据库备份脚本

如果MySQL是主从架构,建议在从节点进行数据备份,防止影响到主库的数据写入操作。

dailybackup.sh

#!/bin/bash

# 配置项
BACKUP_DIR="/data/backup/mysql"             # 备份文件存储目录
MYSQL_USER="root"                           # MySQL 用户名
MYSQL_PASS="12345678"                       # MySQL 密码
DATABASE_NAME="mydb"                        # 要备份的数据库名,可改为 all_databases 全库备份
DATE=$(date +"%Y%m%d_%H%M%S")               # 时间戳
BACKUP_FILE="$BACKUP_DIR/${DATABASE_NAME}_backup_$DATE.sql.gz"

# 日志输出
LOG_FILE="$BACKUP_DIR/backup.log"

# 开始备份
echo "[$(date)] 开始备份数据库: $DATABASE_NAME" >> $LOG_FILE

# 使用 mysqldump 备份并用 gzip 压缩
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" \
          --single-transaction \
          --routines \
          --triggers \
          --set-gtid-purged=OFF \
          "$DATABASE_NAME" | gzip > "$BACKUP_FILE"

# 检查是否备份成功
if [ $? -eq 0 ]; then
    echo "[$(date)] 备份成功: $BACKUP_FILE" >> $LOG_FILE
else
    echo "[$(date)] 备份失败!" >> $LOG_FILE
fi

# 删除7天前的旧备份
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
echo "[$(date)] 已清理7天前的旧备份" >> $LOG_FILE

image-20251106162037215

设置定时执行

# 使用如下命令打开定时任务设置文本
crontab -e

# 在打开的 crontab 文件中输入 0 0 * * * 表示每天0点执行备份脚本
0 0 * * * sh /data/backup/mysql/dailybackup.sh

# :wq保存退出

# 查看当前用户的 crontab 文件,确保任务已经添加成功
crontab -l

image-20251106161943926

备份数据还原

gunzip < your_backup.sql.gz | mysql -u用户名 -p密码 数据库名