![MySQL 复制 A->B->C](https://linux22.com/image/602423/MySQL%20%E5%A4%8D%E5%88%B6%20A-%3EB-%3EC.png)
我正在设置 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
经过这些更改后,一切正常;)谢谢帮助