最近我在使用 Canal 做 binlog 的订阅服务。由于阿里云 RDS 开启 binlog 订阅需要收费,太坑了,而且还很贵。于是我们就决定使用 rds oss binlog 离线订阅读取的方式来实现某些业务。
在实际使用 canal 中,我们配置好之后,binlog 文件却一直都不产生。于是,我就在想能不能立即让 MySQL 生成一个 binlog 文件。
网上搜索了很久,发现这方面的资料非常的少。
而通过官网发现,MySQL Binlog 日志的生成规则比较坑。MySQL 实例空间内生成 binlog 日志的规则如下:
- 通常情况下,当前binlog大小超过500MB或超过6小时会切换到下一序号文件继续写入,即写满500MB或超过6小时就会生成新的binlog日志文件。新的binlog文件继续写入,老的binlog文件并不会立刻上传,会异步上传。
- 有些情况下,binlog日志不满500MB就不再写入,比如由于命令的执行、系统重启等原因。
- 有些情况下,会出现binlog文件尺寸超过500MB的情况,比如当时在执行大事务,不断写入binlog导致当前binlog文件尺寸超过500MB。
这个规则太 bug 了。500M 和 6 小时,我们都等不起,于是我继续在官方查资料。最终有了新的发现。
在 mysql 中 flush logs 操作会生成一个新的 binlog 文件。
如果在从库执行 flush logs 不仅会生成一个新的 binlog 文件,而且会生成一个新的 relaylog 文件。
不仅如此,flush logs 还影响 slow log 和 general log,当删除 slow log 或者 general log,然后执行 flush logs,此时会再重新生成一个新的 slow log 或者 general log。
但我由于是在测试库中进行,不影响现实业务,所以,可以随便的进行 flush logs。
: » MySQL Binlog 手动生成,立即生成 binlog 文件的方法
原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/tech/database/252404.html