前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql复制系列1-复制的基本原理

mysql复制系列1-复制的基本原理

原创
作者头像
wangwei-dba
修改2021-05-08 10:24:10
5140
修改2021-05-08 10:24:10
举报
文章被收录于专栏:mysql-dba

dba面试的时候基本上都会被问复制的原理,但你真的了解吗?

复制有几个线程(分别介绍一下作用)

主库的二进制日志是主库主动推送到从库,还是从库去请求?

其实复制有很多知识点,我们先从复制的基本原理讲起

复制的原理:

主从复制原理
主从复制原理

主库上的所有数据的变更(DDL,DML等)都会被记录到自己的binlog日志中,从库利用从主库传输来的binlog进行回放来模拟主库的数据变更

所以主从复制的原理是:

用户提交数据更改,主库把所有数据的更改写进binlog日志,主库通过binlog dump线程把二进制日志推送给slave(这个时候从库是被动接收数据的,主库主动推送)

从库的i/o线程与主从的binlog dump线程成功连接后,从库的i/o线程接收主库binlog dump线程发送的二进制日志,并将它们写入从库本地的relay log日志文件中

从库的sql线程读取并解析relay log日志中的内容,按照顺序进行回放,并将数据变更写入本地数据文件中,这样就是实现了数据在主从数据库实例之间的同步

每一对主从关系中都有三个线程

主库上的 binlog dump线程(负责推送binlog日志给io线程)

从库的i/o线程(负责接收主库的binlog日志并写入relay log)

从库sql线程(复制回放relay log日志中主库变更操作)

主库的二进制日志是主库主动推送到从库,还是从库去请求?

1.对于复制线程在主从之间新建立的连接或者从新建立的连接,这个时候是从库主动发起的连接请求(从库携带二进制日志的位置信息请求新的日志)因为这个时候主库并不知道需要发送那些二进制日志给新建立的从库,所有这个时候是从库主动请求的

2.如果复制线程已经在主从之间建立连接,而且从库已经完全接收了,建立连接时从库请求的二进制日志了,后续的增量二进制日志是由主库主动推送给从库的,而不是从库请求的(这个时候主库随时都可能写入新的内容,从库很难及时的感知到)这个时候主库产生二进制日志,直接通知自身的binlog dump线程,binlog dump收到通知后,会直接把新产生的二进制日志发送给从库的i/o线程

二进制日志同步既有从库主动请求的,也有主库主动推送的

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档