【问题标题】:How doe MySQL Replication really work ? (about Threads)MySQL 复制是如何真正工作的? (关于线程)
【发布时间】:2023-03-20 23:06:01
【问题描述】:

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

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

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

我知道有 3 个线程:

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

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

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

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

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

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

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

  • 最新的从站将主要读取最新的事件 仍然缓存在主机上的操作系统缓存中,所以不会有 任何物理磁盘读取主服务器以提供二进制日志 向从站发送的事件

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

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

如果master的数据库中同时有很多小的写入请求,这个解决方案是否会导致过载问题?

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

提前谢谢你! :)

【问题讨论】:

    标签: mysql multithreading replication master slave


    【解决方案1】:

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

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

    【讨论】:

    • 好的,非常感谢 ;) 顺便说一句,当你说“事件”时,你的意思是“只有一个 sql 请求”,或者可以是多个请求的集合?
    • 这似乎是正确的答案:slave等待(我不完全知道如何)master发送一个事件,当超时发生时,slave断开然后重新连接(所以问再次是二进制日志)。谢谢您的答复 ! ;)
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 2014-04-20
    • 2013-04-04
    • 2013-01-06
    • 2013-03-13
    • 1970-01-01
    • 2014-03-18
    • 2013-06-04
    相关资源
    最近更新 更多