MySQL数据库备份方案
通过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
设置定时执行
# 使用如下命令打开定时任务设置文本
crontab -e
# 在打开的 crontab 文件中输入 0 0 * * * 表示每天0点执行备份脚本
0 0 * * * sh /data/backup/mysql/dailybackup.sh
# :wq保存退出
# 查看当前用户的 crontab 文件,确保任务已经添加成功
crontab -l
备份数据还原
gunzip < your_backup.sql.gz | mysql -u用户名 -p密码 数据库名