数据库备份与恢复:MySQL binlog 日志与定时备份脚本
·
MySQL 数据库备份与恢复:Binlog 日志与定时备份脚本
一、Binlog 日志核心原理
- 基本作用:记录所有修改数据库的操作(增删改),用于:
- 数据恢复:基于时间点/位置恢复
- 主从复制:同步数据变更
- 记录模式:
STATEMENT:记录原始 SQL 语句ROW:记录行数据变化(默认)MIXED:混合模式
二、Binlog 配置步骤
- 修改 MySQL 配置文件(
my.cnf):
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin # binlog 存储路径
expire_logs_days = 7 # 自动清理旧日志
binlog_format = ROW # 推荐使用 ROW 模式
- 重启服务生效:
sudo systemctl restart mysql
三、定时备份脚本实现
#!/bin/bash
# 全量备份 + binlog 增量备份脚本
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)
# 1. 全量备份
mysqldump -u root -p'密码' --all-databases --single-transaction --flush-logs --master-data=2 > ${BACKUP_DIR}/full_${DATE}.sql
# 2. 获取当前 binlog 位置
BINLOG_FILE=$(mysql -u root -p'密码' -e "SHOW MASTER STATUS" | awk 'NR==2 {print $1}')
BINLOG_POS=$(mysql -u root -p'密码' -e "SHOW MASTER STATUS" | awk 'NR==2 {print $2}')
# 3. 记录位置信息
echo "${DATE} ${BINLOG_FILE} ${BINLOG_POS}" >> ${BACKUP_DIR}/binlog_index.txt
# 4. 清理旧备份(保留 30 天)
find ${BACKUP_DIR} -name "*.sql" -mtime +30 -exec rm {} \;
四、数据恢复流程
- 恢复全量备份:
mysql -u root -p'密码' < /backup/mysql/full_20231001.sql
- 增量恢复(通过 binlog):
# 根据记录的 binlog 位置恢复
mysqlbinlog --start-position=154 /var/log/mysql/mysql-bin.000002 | mysql -u root -p'密码'
# 按时间点恢复(恢复 10:00-12:00 的数据)
mysqlbinlog --start-datetime="2023-10-01 10:00:00" --stop-datetime="2023-10-01 12:00:00" /var/log/mysql/mysql-bin.* | mysql -u root -p'密码'
五、关键注意事项
- 备份验证:
- 定期执行
SHOW BINARY LOGS确认日志完整性 - 使用
mysqlbinlog -v检查日志内容
- 定期执行
- 安全措施:
- 备份文件设置权限:
chmod 600 /backup/mysql/* - 异地存储备份(如 S3、NFS)
- 备份文件设置权限:
- 监控建议:
- 监控磁盘空间:
du -sh /var/log/mysql/ - 设置备份失败告警(通过脚本返回值)
- 监控磁盘空间:
最佳实践:每日全量备份 + 实时 binlog,恢复时可实现秒级 RPO(恢复点目标)。建议每周在测试环境验证恢复流程。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)