MySQL系列文章
MySQL(一)基本架构、SQL语句操作、试图
MySQL(二)索引原理以及优化
MySQL(三)SQL优化、Buffer pool、Change buffer
MySQL(四)事务原理及分析
MySQL(五)缓存策略
MySQL(六)主从复制
数据库三范式
前言
MySQL自带主从同步机制,安装了MySQL的设备可以通过设置相关参数来实现主从数据库的同步功能。
设置MySQL主从有什么好处?
- 类似于集群的好处,提高可用性、性能、容错性等。
- 读写分离
- 负载均衡
主从用什么模式?
通常一主一从,或者一主多从。
主服务器只负责写,而从服务器只负责读,从而提高了效率减轻压力。
主从复制原理
- 主库更新事件流程 ( update、 insert、 delete) :通过 io-thread写到 binlog;
binlog:用于数据备份/主从复制,确保主从数据一致。
redolog:事务持久化/确保本地数据一致。 - 从库请求读取 binlog,通过 io-thread 写入从库本地 relay-log(中继日志);
- 从库通过 sql-thread 读取 relay-log,并把更新事件在从库中重放(replay)一遍;
复制流程:
- Slave 上面的 IO 线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。
- Master 接收到来自 Slave 的 IO 线程的请求后,负责复制的IO 线程会根据请求信息读取日志指定位置之后的日志信息,返回给 Slave 的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到 Master 端的 binlog 文件的名称以及 binlog 的位置。
- Slave 的 IO 线程接收到信息后,将接收到的日志内容依次添加到 Slave 端的 relay-log 文件的最末端,并将读取到的Master 端的 binlog 的文件名和位置记录到master-info 文件中,以便在下一次读取的时候能够清楚的告诉 Master 从何处开始读取日志。
- Slave 的 Sql 进程检测到 relay-log 中新增加了内容后,会马上解析 relay-log 的内容成为在 Master 端真实执行时候的那些可执行的内容,并在自身执行。
详细内容参考
https://juejin.cn/post/6967224081410162696
https://www.cnblogs.com/kylinlin/p/5258719.html