MySQL的Binary Log(二进制日志)记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。它的主要目的是用于复制和数据恢复。
MySQL的binlog文件有一个有效期,过了这个期限,旧的binlog文件会被自动删除。这个期限可以通过expire_logs_days
参数来设置。
MySQL的binlog有三种格式:
原因:binlog文件过大可能是由于长时间没有清理旧的binlog文件,或者数据库操作非常频繁。
解决方法:
expire_logs_days
参数,定期清理旧的binlog文件。SET GLOBAL expire_logs_days = 10; -- 设置binlog文件保留10天
原因:可能是由于磁盘故障、MySQL进程崩溃等原因导致binlog文件丢失。
解决方法:
innodb_flush_log_at_trx_commit
参数为1,确保每次事务提交都同步binlog文件到磁盘。SET GLOBAL innodb_flush_log_at_trx_commit = 1; -- 设置每次事务提交都同步binlog文件到磁盘
原因:可能是由于binlog文件损坏或者解析工具版本不兼容。
解决方法:
mysqlbinlog
工具进行修复。mysqlbinlog --start-datetime="YYYY-MM-DD HH:MM:SS" --stop-datetime="YYYY-MM-DD HH:MM:SS" binlog.000001 > recovered.sql
领取专属 10元无门槛券
手把手带您无忧上云