MySQL Replication如何真正起作用? (关于线程)

时间:2013-05-30 14:58:48

标签: mysql multithreading replication master slave

我发现基于Master和Slave概念的MySQL的复制可能性。

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

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

我知道有3个主题:

  • Slave SQL thread:在slave的数据库上执行请求

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

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

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

  1. 首先I / O线程连接到Master
  2. Master创建Binlog转储线程
  3. Slave Thread要求主线程以获取二进制日志的最新版本
  4. 主线程向其发送二进制日志的副本
  5. Slave Thread读取副本,并将其内容写入Slave Host(对于Slave SQL Thread,可以执行这些新请求)
  6. 没关系,但那之后的I / O线程的行为怎么样?? 它仍然连接在Master上,但是如果在主数据库上进行了新的写入请求会发生什么?什么是真正的过程?

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

    •   

      最新的奴隶主要是阅读事件   仍然缓存在主服务器上的OS缓存中,所以不会有   任何物理磁盘读取主服务器以提供二进制日志   事件到奴隶

    •   
      那么I / O线程总是在缓存中寻找新的请求? ...

    •   

      当新请求写入二进制日志文件时,Master   线程将其发送到每个连接的I / O线程。

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

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

    提前谢谢! :)

1 个答案:

答案 0 :(得分:1)

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

我无法给出关于超载的100%答案。但我从未遇到过使用插入,更新和删除分配来复制数据库的任何问题。