Mysq主从复制
复制解决的基本问题是让一台服务器的数据与其他服务器同步
MYSQL支持两种复制方式:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录二进制日志(binlog)、在备库重放日志的方式来实现异步的数据复制。这意味着,在同一个时间点备库上的数据可能与主库存在不一致,并且无法保证主备之间的延迟。
复制解决的问题
下面是复制比较常见的用途:
1.数据分布(读写分离)
2.负载均衡
3.备份
4.高可用性和故障切换
5.Mysql升级测试
复制如何工作
复制有3个步骤:
1.在主库上把数据更改记录到二进制日志(binary log)中(这些记录被称为二进制日志事件)
2.备库将主库上的日志复制到自己的中继日志(Relay log)中
3.备库读取中继日志中的事件,将其重放到备库数据之上。
第一步是在主库上记录二进制日志。在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中。MySql会按照事务提交的顺序而非每条语句的执行顺序来记录二进制日志。在记录二进制日志后,主库会告诉存储引擎可以提交事务了。
下一步,备库将主库的二进制日志复制到其本地的中继日志中。
复制的原理
1.基于语句的复制
基于语句的复制模式下,主库会记录那些造成数据更改的查询,当备库读取并重放这些事件是,实际上只是把主库上执行过的SQL再执行一遍。
2.基于行的复制
这种方式会将实际数据记录在二进制日志中。
由于无需重放主库的查询,使用基于行的复制能够更高效地复制数据
Ref:
《高性能Mysql》