深入了解Mysql【十五】主从复制原理
1、概念
复制是MySQL数据库提供的一种高可用、高性能的解决方案,指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。
2、用途
- 读写分离
读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取操作,不能写入,实现备份的同时,也实现了数据库性能的优化,提升了服务器安全。 - 热备
就是复制的实现,主服务器将binlog发送到备份服务器,备份服务器读取binlog,顺序执行binlog中的操作。 - 扩展
业务量过大的时候,单机IO过高,需要多机扩展,降低单机IO访问频次。
4、异步复制
简单来说三步实现:
- 主服务器将更新记录到binlog
- 从服务将主服务器的binlog拷贝到他的中继日志(relay log)
- 从服务器将中继日志的数据,顺序更新到自己的数据库上
如图:
具体流程:
- 主库的更新事件(update,insert,delete)被写入到binlog
- 从库连接主库
- 主库的binlog dump线程将binlog发送到从库
- 从库的IO线程将binlog写入中继日志
- 从库的SQL线程执行中继日志中的更新事件,写入从库DB
以上是异步模式,当主库挂了之后,从库很大成都上会丢失数据,导致中从数据出现不一致,并出现数据没法恢复的问题。
5、半同步复制
半同步模式下,主节点需要等待至少一个节点将binlog写入到中继日志,之后就会提交返回,否则等待到超时时间,切换成异步模式再提交。这样提高了数据的安全性,至少有一台从服务器备份了新的数据。
原理如图:
6、全同步复制
全同步就是当主节点事务提交之后,所有的从节点必须收到并且回复,之后主节点才能做继续的工作,缺点就是事务时间边长。
7、异步、半同步、全同步对比
参考
MySQL 5.7半同步复制技术
深度探索MySQL主从复制原理
MySQL 主从复制原理
MySQL主从复制原理探索
《MySQL技术内幕:InnoDB存储引擎 第二版》
《MySQL运维内参》
《高可用MySQL-构建健壮的数据中心》
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的技术分享!