MySQL 复制 A->B->C

MySQL 复制 A->B->C

我正在设置 MySQL 复制为 master -> slave/master -> slave 和复制为 master -> slave ,它工作正常,但是当我在 my.cnf 中启用此选项时

log-slave-updates=1

对于更新主 bin 日志,我的复制开始变慢,并且时间

Seconds_Behind_Master

在成长。

我使用 innodb 引擎,但数据库很大。有什么想法可以改善复制吗?看来网络不是问题。我还想使用

binlog_format=ROW

但是 master 正在使用复制‘语句’的默认设置,并且我无法重置 master;)

谢谢 ...

答案1

尝试找出瓶颈所在

  • 这是从属服务器的 CPU 限制吗 [mysql 5.1 和 5.5 中的复制是单线程的,它只使用一个核心]。如果是 - 考虑在从属主机上放置更快的 CPU。

  • 它是主机上的 io 子系统吗?如果是的话 - 考虑使用更多主轴、ssd 或具有更大 bbu 缓存的 raid 卡,以写回模式“吸收”写入峰值

    你可能还想寻找“[mysql] 框架之外”的解决方案,例如钨复制器

答案2

您真的有 3 个主节点的异步复制吗?这真是个坏主意。如果您丢失了一个节点,其余节点将变得越来越不同步。

我还想使用...binlog_format=ROW

这取决于您的查询是什么样子的,它可能会有所帮助,但混合模式可能是一个更好的解决方案。

我使用 innodb 引擎但是数据库很大。

如果数据库的大小影响复制性能,那么您显然有很大空间通过模式更改和查询调整来提高性能。

但主服务器正在使用复制“语句”的默认设置,我无法重置主服务器

为什么不?

答案3

嗨,我通过提高 innodb 的性能解决了这个问题。一般来说,我改进了它的 io 操作。

innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_write_io_threads = 32
innodb_read_io_threads = 32
innodb_thread_concurrency = 16

我也改用了 btrfs

nospace_cache

经过这些更改后,一切正常;)谢谢帮助

相关内容