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

[经验分享] MySQL之主从复制的过程和原理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-11 13:07:27 | 显示全部楼层 |阅读模式
  前几天搭建了MySQL的主从复制,已经搭建完成,但是主从复制的原理还不知道,所以来研究一下。    本文的部分内容来自于互联网。
    主从复制的过程
    首先要了解到的是一个单向主从复制的实现是由三个线程来完成,master一个IO线程,slave一个IO
线程和一个SQL线程。
    1. slave 上面的IO线程连接上 master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
    2. master 接收到来自 slave 的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给slave端的IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在master端的bin-log文件的名称以及在bin-log中的位置;
    3. slave的IO线程接收到信息后,将接收到的日志内容依次写入到slave端的Relay Log文件(hostname-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的告诉master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”
  4. slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在 master 端真实执行时候的那些可执行的Query 语句,并在自身执行这些Query。这样,实际上就是在 master 端和slave 端执行了同样的Query,所以两端的数据是完全一样的。
    下面是实际的操作图
    1.首先看一下主库的状态
wKioL1VMc9WAJUolAADln3tdavQ440.jpg

2.然后看一下从库中master.info和nginx-relay-bin.000008(请无视名字,这个跟主机名有关)

wKiom1VMc7iwixsnAAFNotQJQJ8605.jpg

master.info中一部分文件内容,跟master的bin-log的名称和位置是一致的
wKiom1VMc-yyt_TnAABnbg3KZ5Q941.jpg

然后是nginx-relay-bin.000008的文件(有删节)

wKioL1VMecPSwu1oAAV1-8HsXG4894.jpg

然后主库建一个库测试一下
wKiom1VMeK6TpglhAAEWvIzE2Yc027.jpg

看一下从库的master.info和nginx-relay-bin.000008文件
wKiom1VMee_iFlBmAACMcP6l_lc383.jpg

nginx-relay-bin.000008文件
wKioL1VMe2OQ_KeRAAIOLzVRi0s218.jpg

现在我们来模拟一下故障,此时从数据库宕机,此时master.info文件不变,但是nginx-relay-bin.000008文件产生变化
wKioL1VMfLjQ9QJ9AAGaO_LKvww685.jpg

主数据库新建一个库测试一下,
wKiom1VMfCvjx0QXAAFPL9ZQ99k350.jpg

现在启动从数据库,此时relay-bin日志会重新产生两个,查看一下数值大的那个
wKioL1VMfvmSbrTQAAFlGqdgxE0597.jpg

查看nginx.relay-bin.000010

wKiom1VMf9bTVz4qAAZ53PEyrFA804.jpg

此时master.info文件也会更新到最新的pos
wKioL1VMgeOjolceAABurZycrxY285.jpg
故障模拟完成。
写到这里,突然感觉写的实在是太繁琐了,详细一点也好,保证大家能看明白,不会云里雾里的感觉。

--------------------------------------分割线-----------------------------------------
说一下自己做实验时一些小细节
1.搭建完单向主从的时候,在主库创建了一个库sunys01做测试,然后在从库删掉了他,此时的主从数据不一致,但是主从还是正常的,主库再建一个库,从库也能同步的到数据。我一直以为主从同步只要是在从库进行过操作就会导致主从断掉。现在接上面的情况,从库删掉了sunys01,在主库也删掉sunys01,此时主从断裂,主库写数据从库无法同步数据, 现在我在从库重新创建了一个sunys01库,重启一下mysql,主从恢复了,主库中后续数据也成功同步。

2.做了一个双向主从在主1创建新库,同时他的master status变掉了,主1创建的库在主2也有,但是主2的master status也变掉了。我同学也是做的双主,但是主2的master status是不会变的,不知道是什么原因



运维网声明 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.iyunv.com/thread-65888-1-1.html 上篇帖子: mysql主备复制搭建(使用mysqld_muti) 下篇帖子: MySQL-约束类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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