概述
MySql主从复制也称之为主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或者多台主机上,并重新应用日志(relay log)中的 SQL 语句来实现复制功能。MySql支持单向、双向、链式级联、异步复制,5.5版本之后加入了半同步复制,5.6版本之后增加了GTID复制,5.7版本增加了多源复制、并行复制、loss-less复制,复制过程中一台服务器充当主库(master),而一个或者多个服务器充当从库(slave)。
MySql的主从复制功能可实现:
- 可以实现实时灾备,让从库随时接管有故障的主库。
- 还可以让从库分担主库的压力,做读写分离,提供查询服务。并且可以让从库做一些特殊Sql的统计任务。
- 可以利用从库做备份来减少对公司现有业务的影响,以及利用从库来完成MySql平滑的版本升级操作。
主从复制原理
主从复制过程中的工作线程包括:
主服务器有一个工作线程,I/O dump thread;
从库服务器有两个工作线程,I/O thread 和 SQL thread。
主库把外界接收的 SQL 请求记录到自己的 binlog 日志中,从库的 I/O thread 去请求主库的 binlog 日志,并将得到的binlog日志写到自己的 relay log(中继日志)文件中。然后在从库上重做应用中继日志中的SQL语句。主库通过I/O dump thread 给从库 I/O thread 传送 binlog 日志。
主从同步过程示意图:
常见几种主从架构模式
单向主从模式:
双向主从模式:
级联主从模式:
一主多从模式:
多主一从模式:
主从的延迟
造成主从复制数据延迟的原因包含:
- MySql主从之间的同步本来就不是实时同步的,而是异步的同步,也就是说,主库提交事务之后,从库再执行一遍。
- 在主库上对没有索引大表的列进行 delete 或者 update 的操作。
- 从库的硬件配置没有主库的高,经常忽略从库的重要性。
- 网络抖动导致 I/O 线程复制延迟。
作者: Zealon
崇尚简单,一切简单自然的事物都是美好的。