设为首页 收藏本站
查看: 860|回复: 0

[经验分享] Mysql主从复制的实现细节

[复制链接]

尚未签到

发表于 2018-10-6 07:52:03 | 显示全部楼层 |阅读模式
DSC0000.jpg

  MySQL复制功能使用三个线程实现,一个在主服务器上,另一个在从服务器上:
  Binlog(二进制日志)转储线程。主站创建一个线程,在从站连接时将二进制日志内容发送给从站。该线程可以在主服务器上的SHOW PROCESSLIST输出中标识为Binlog转储线程。
  二进制日志转储线程在主服务器的二进制日志上获取一个锁,用于读取要发送给从服务器的每个事件。一旦事件被读取,即使在事件被发送到从设备之前,锁也被释放。
  从属I / O线程。当从服务器上发出START SLAVE语句时,从服务器创建一个I / O线程,该线程连接到主服务器并要求它发送记录在其二进制日志中的更新。
  从I / O线程读取主服务器的Binlog转储线程发送的更新(请参阅上一项),并将它们复制到包含从服务器中继日志的本地文件中。
  此线程的状态在SHOW SLAVE STATUS的输出中显示为Slave_IO_running,或在SHOW STATUS的输出中显示为Slave_running。
  从属SQL线程。从站创建一个SQL线程来读取由从站I / O线程写入的中继日志并执行其中包含的事件。
  在前面的描述中,每个主/从连接有三个线程。拥有多个从站的主站为每个当前连接的从站创建一个二进制日志转储线程,并且每个从站都有自己的I / O和SQL线程。
  从机使用两个线程将读取更新与主机分离,并将其执行为独立任务。因此,如果语句执行速度较慢,则阅读语句的任务不会减慢。例如,如果从服务器没有运行一段时间,它的I / O线程可以在从服务器启动时快速地从主服务器获取所有二进制日志内容,即使SQL线程远远落后。如果从站在SQL线程执行完所有提取的语句之前停止,那么I / O线程至少会提取所有内容,以便将语句的安全副本本地存储在从站的中继日志中,以备下次执行奴隶开始。
  SHOW PROCESSLIST语句提供了一些信息,告诉你在主服务器和从服务器上发生的复制事件
  以下示例说明了SHOW PROCESSLIST的输出中三个线程是如何显示的。
  在主服务器上,SHOW PROCESSLIST的输出如下所示:
  mysql> SHOW PROCESSLIST\G
  *************************** 1. row ***************************
  Id: 2   #Binlog转储复制线程ID
  User: root
  Host: localhost:32931
  db: NULL
  Command: Binlog Dump
  Time: 94
  State: Has sent all binlog to slave; waiting for binlog to #状态信息表明所有未完成的更新已发送到从站,并且主站正在等待更多更新发生
  be updated
  Info: NULL
  这里,线程2是一个Binlog转储复制线程,它为连接的从服务器提供服务。 状态信息表明所有未完成的更新已发送到从站,并且主站正在等待更多更新发生。 如果在主服务器上看不到Binlog Dump线程,则表示复制未运行; 也就是说,目前没有奴隶连接。
  #——————————————————————————————————————————————————————————————————————————————————————————————————————
  在从属服务器上,SHOW PROCESSLIST的输出如下所示:
  mysql> SHOW PROCESSLIST\G
  *************************** 1. row ***************************
  Id: 10 #线程10是与主服务器通信的I/O线程
  User: system user
  Host:
  db: NULL
  Command: Connect
  Time: 11
  State: Waiting for master to send event
  Info: NULL
  *************************** 2. row ***************************
  Id: 11 #线程11是处理存储在中继日志中的更新的SQL线程
  User: system user
  Host:
  db: NULL
  Command: Connect
  Time: 11

  State: Has read all>  thread to update it
  Info: NULL
  状态信息指示线程10是与主服务器通信的I / O线程,线程11是处理存储在中继日志中的更新的SQL线程。 当SHOW PROCESSLIST运行时,两个线程都处于空闲状态,等待进一步更新。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-613072-1-1.html 上篇帖子: mysql高可用架构详解 下篇帖子: MySQL基础(二)【MySQL数据库对象与应用】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表