2

我正在发现基于主从概念的 MySQL 复制可能性。

但我没有找到任何关于线程如何真正工作的详细信息

(甚至在这个网站上: http: //dev.mysql.com/doc/refman/5.0/en/replication-implementation-details.html

我知道有3个线程:

  • 从属 SQL 线程:在从属数据库上执行请求

  • Slave I/O thread:连接到Master,读取二进制文件并将其请求写入Slave

  • 主 Binlog 转储线程:将二进制文件的副本发送到每个连接的 I/O 线程。

我也知道他们正在遵循这个过程:

  1. 首先 I/O 线程连接到 Master
  2. Master 创建 Binlog 转储线程
  3. 从属线程向主线程询问以获取二进制日志的最新版本
  4. 主线程向它发送二进制日志的副本
  5. Slave Thread读取副本,并将其内容写入Slave Host(对于Slave SQL Thread,谁可以执行这些新请求)

没关系,但是在那之后I/O 线程的行为呢?它仍然连接在 Master 上,但是如果在 Master 数据库上完成了新的写入请求会发生什么?真正的过程是什么?

我发现了不同的可能性,但我不确定它们是否是好的:

  • 最新的从站将主要读取仍缓存在主站上的操作系统缓存中的事件,因此在主站上不会进行任何物理磁盘读取以将二进制日志事件提供给从站

所以 I/O 线程总是在缓存中寻找新的请求?...

  • 当一个新的请求被写入二进制日志文件时,主线程将它发送给每个连接的 I/O 线程。

如果主数据库中同时有许多小写请求,此解决方案是否会导致过载问题?

这是我在 StackOverflow 上的第一篇文章,希望我的问题可以理解。

先感谢您 !:)

4

1 回答 1

1

我认为您需要 mysql 源代码才能真正了解该过程是如何工作的。据我所知,奴隶等待主人发送事件。

关于超载,我不能给你 100% 的答案。但是我从来没有遇到过使用分配插入、更新和删除来复制数据库的任何问题。

于 2013-05-30T17:35:17.063 回答