我一直在用 MySQL 和 MariaDB 做一些测试,我注意到二进制日志的增长有很大的不同——我在网上找不到太多关于这个的信息。
我有一个测试数据库,并且编写了一个模拟事务活动(选择、更新、插入、删除等)的脚本,目的是进行一些简单的负载测试,然后用于测试时间点恢复过程。
我注意到,在 MySQL 上运行我的自动化脚本半小时会产生大约 400MB 的二进制日志。
当我在 MariaDB 上做同样的事情时,我只得到大约 2MB 的二进制日志。
所有设置都是相同的,即。
最大 Binlog 大小:100MB 缓冲池:最大 2GB
MySQL 运行的是 v 5.7,Mariadb 运行的是 10.3——两者都在我本地笔记本电脑上的 Docker 中运行。
我还注意到 MariaDB 在性能方面更灵活一些,与使用 MySQL 相比,我在半小时内获得了更多的查询吞吐量。
显然,这里最大的不同在于二进制日志的大小。MariaDB 的较小尺寸意味着我可以比在 MySQL 上更快地前滚二进制日志以进行时间点恢复。
是否有任何书面证据支持这种行为?在查看二进制日志和恢复时,MariaDB 是否比 MySQL 更高效?
是否有一些我应该检查的隐藏/不明显的变量可能会对此测试产生重大影响?
任何有助于理解这一点的帮助都会很棒。
MariaDB 10.3 和 MySQL 5.7 之间的系统变量默认值有很多差异,因此可以解释一些性能和 binlog 大小差异。此外,MariaDB 10.3 当然是更新的代码,是目前最新的主要 MariaDB 版本,而 MySQL 5.7 并不是自 8.0 发布以来最新的 MySQL 主要版本。
例如,MySQL 5.7和MariaDB 10.3之间的默认值
binlog_format
不同:。大多数情况下是statement-based,statement-based binlog格式的优点是写入日志文件的数据较少:ROW
MIXED
MIXED
MariaDB 也有
log_bin_compress
,请参阅压缩事件以减少二进制日志的大小,但默认情况下禁用。