在 MySQL 8 中,二进制日志会自动清除(由 定义binlog_expire_logs_seconds
)。这意味着运行时间更长的集群
binlog_expire_logs_seconds
最终可能不包含具有完整二进制日志的实例,该日志包含实例应用的所有事务。这可能会导致需要自动配置实例,例如使用 MySQL Enterprise Backup,然后才能加入集群。运行 8.0.17 及更高版本的实例支持 MySQL Clone 插件,它通过提供不依赖增量恢复的自动配置解决方案解决了这个问题,请参阅
第 7.4.6 节,“将 MySQL Clone 与 InnoDB Cluster 结合使用”. 运行 8.0.17 之前版本的实例仅支持增量恢复,结果是,根据实例运行的 MySQL 版本,实例可能必须自动供应。否则依赖于分布式恢复的操作(例如
等等)可能会失败。
Cluster
.addInstance()
在运行早期版本 MySQL 的实例上,以下规则用于二进制日志清除:
8.0.1 之前版本的实例没有自动清除二进制日志,因为默认值为
expire_logs_days
0。运行8.0.1之后但早于8.0.4版本的实例在30天后清除二进制日志,因为默认值为
expire_logs_days
30。运行8.0.10以后版本的实例在30天后清除二进制日志,因为默认值为
binlog_expire_logs_seconds
2592000,默认值为expire_logs_days
0。
因此,根据集群运行的时间长短,二进制日志可能已被清除,您可能必须手动配置实例。同样,如果您手动清除二进制日志,您可能会遇到同样的情况。因此,强烈建议您升级到 8.0.17 之后的 MySQL 版本,以充分利用 MySQL Clone 为分布式恢复提供的自动配置,并在为您的 InnoDB 集群配置实例时最大限度地减少停机时间。