跳转至

19. 主从复制原理

1. 主从复制出现原因

#物理损坏(天灾人祸)
坏道、磁头、磁盘、文件系统损坏、只读、格式化、dd、数据文件(删除、头部损坏、坏页)
#逻辑损坏(大部分人为的)
误删除、误修改

2. 前提

1.多台节点
2.server_id不同
3.主库开启binlog
4.主库提供复制用户
5.全备主库,恢复到从库
6.告诉从库:复制使用的用户、密码、IP、port、复制的文件及起点
7.开启复制

3. 文件

#主库
binlog:         #记录主库数据变化
#从库 
relaylog:       #中继日志,存储从库请求的二进制日志的存储位置
master.info:     #存储用户、密码、IP、port,以及记录上次请求的binlog位置
relay-log.info:  #记录上次SQL线程执行郭的relaylog的位置点

4. 线程

#主库
dump thread:#投递线程,主库发送二进制日志给从库的线程
#从库
io thread:  #接收binlog的线程
SQL thread: #执行relaylog日志的线程

5. 原理图

img_3.png

6. 原理文字说明

1.从库io线程,查看master.info信息,获取user、password、IP、port、file、pos等信息,
从库通过获取的用户信息连到主库,从库通过获取的文件信息及位置信息请求主库
2.主库判断是否有新的二进制信息
3.如果有新的binlog,通过dump线程读取binlog,从新信息开始发送二进制事件给从库
4.从库io线程接收binlog日志
5.缓存binlog到TCPIP缓存
6.io线程回复一个ack确认给主库dump线程,主库收到ack后,主库此次复制工作完成
7.更新master.info文件,file、pos更新为最新的请求的值
8.TCPIP缓存数据写入relay-log中
9.SQL线程读取relay-log.info,获取到上次已经执行过的位置信息
10.到relay-log中找最新的日志进行执行
11.再次更新relay-log.info
12.已经执行过的relay-log,会被自动清理

最后更新: 2022-02-25 03:53:42