考虑一个场景,您有一个 MySQL 主从服务器正在复制。我们知道,master 上启用了二进制日志,slave 从 master 的二进制日志中读取。从 MySQL 文档中我了解到,只有完全提交的事务才会写入二进制日志,因此在复制过程中不会遗漏任何事务(如果一切正常的话)。所以我的假设是,一旦事务完成并写入表空间,它将被写入二进制日志。
我的疑惑是二进制日志的写操作是并发的还是顺序的? 这意味着,例如,在写入二进制日志之前和写入表空间之后,如果服务器关闭或崩溃,同时发生的事务会发生什么?
另外,我正在使用mysqlbinlog
实用程序并设置stop-never
参数。我需要知道,stop-never
启用后二进制日志将在目标服务器上同步(我使用刷新日志对其进行了测试——它也在目标服务器上创建了新日志)。
问题
- 二进制日志的复制是如何工作的?
- 它是否首先写入主二进制日志并复制到目标日志?
- 它是否同时写入源和目标二进制日志?
- MySQL性能和磁盘IO性能会有什么影响?
如果我误解了这个概念,请纠正我。提前致谢。
这是您每个问题的答案
我在对“MySQL 复制是否受高延迟互连影响?”的回答中详细列出了 MySQL 复制所采取的步骤 ?.
其他人回答了同一篇文章,但从数据库客户端的角度来看
中间有很多步骤
绝不。不是半同步复制,也不是 GTID 复制。看看上面的步骤
这取决于二进制日志和中继日志的存储位置。如果数据和日志在同一个磁盘挂载上,您将同时对数据进行随机写入和对日志进行顺序写入。两者将竞争相同的磁盘空间。您应该将它们分开(请参阅我去年的帖子Should the Redo log on a production MySQL server be configured to another location?)