MySQL binlog日志大小超过限定范围

时间:2022-05-03
本文章向大家介绍MySQL binlog日志大小超过限定范围,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

my.cnf中有两个参数设置:

  • expire_logs_days = 7 #binlog保留时间7天
  • max_binlog_size = 1G #binlog大小

问题描述:

mysql binlog大小限制1G,但是实际却达22G

分析原因:

  • mysqld在每个二进制日志名后面添加一个数字扩展名,每次你启动服务器或刷新日志时该数字则增加。如果当前的日志大小达到max_binlog_size,还会自动创建新的二进制日志。
  • 如果你正使用大的事务,二进制日志还会超过max_binlog_size:事务全写入一个二进制日志中,不会写入不同的二进制日志中,所以会出现binlog日志大小超过限定范围。

解决方案:

  • 在执行大事物前关闭 set session sql_log_bin=0; (默认是开启的)。千万不要不假思索的加上 global 修饰符(set global sql_log_bin=0),这样会导致所有在Master数据库上执行的语句都不记录binlog,这肯定不是你想要的结果。
  • 根本解决还是需要拆分大事物。此时,我们需要查看哪个大事物导致,对应 去处理。可以进行分批commit。

注意:

5.5.5版本后不再支持 set @@session.sql_log_bin 方式设置在事物或子查询中

Beginning with MySQL 5.5.5, it is no longer possible to set @@session.sql_log_bin within a transaction or subquery. (Bug #53437)

http://dev.mysql.com/doc/refman/5.5/en/set-sql-log-bin.html