本文共 1578 字,大约阅读时间需要 5 分钟。
MySQL提供了四种类型的日志,其中二进制日志(Binary Log,简称Bin Log)是最为重要的。它记录了所有数据库的DML(数据操作语言)和DDL(数据定义语言)语句,除了查询日志。Bin Log以事件形式存储,详细记录数据更改过程,是数据库灾难恢复的关键工具。本文将详细介绍二进制日志的使用方法、日志管理策略以及恢复操作。
MySQL默认不启用二进制日志,需要手动配置。通过修改my.cnf
文件,添加以下内容:
[mysqldump]# 指定二进制日志的存储路径log-bin = /var/log/mysql/mysql-bin.log
启用二进制日志后,日志文件命名规则为mysql-bin.000001
,mysql-bin.000002
等,序号递增。索引文件mysql-bin.index
记录日志的最大序号。
RESET MASTER
执行命令:
mysql -uroot -p -e "RESET MASTER TO 0;"
删除所有二进制日志文件,新日志将从000001
开始。
PURGE MASTER LOGS
PURGE MASTER LOGS BEFORE '2023-10-05 15:30:00';
PURGE MASTER LOGS TO 'mysql-bin.0001000';
在my.cnf
中添加:
expire_logs_days = 3
设置日志保留天数,默认为3天,3天后自动过期清理。
在面临数据库故障时,使用二进制日志进行完整恢复。例如,结合mysqldump
备份和二进制日志恢复:
mysql -uroot -p < backup.sql
接着使用二进制日志恢复后续变更:
mysqlbinlog mysql-bin.000001 | mysql -uroot -p
如果误操作导致数据丢失,可以基于时间点进行恢复。例如,删除表的误操作发生在2023-10-05 10:00,可以跳过该时间点的操作:
mysqlbinlog --stop-date='2023-10-05 09:59:59' /var/log/mysql/mysql-bin.000001 | mysql -uroot -p
然后继续执行后续日志:
mysqlbinlog --start-date='2023-10-05 10:01:00' /var/log/mysql/mysql-bin.000001 | mysql -uroot -p
对于具体操作位置恢复,可使用二进制日志中的Log_pos
位置值。例如,误操作的Log_pos
为8879917,需恢复到8879916和8879918的位置:
mysqlbinlog --stop-position=8879916 /var/log/mysql/mysql-bin.000001 | mysql -uroot -p
mysqlbinlog --start-position=8879918 /var/log/mysql/mysql-bin.000001 | mysql -uroot -p
PURGE
命令或设置自动清理策略。通过合理管理二进制日志,可以有效保障数据库的稳定性和数据安全,提升数据库管理员的工作效率。
转载地址:http://jabfk.baihongyu.com/