mysql 复制原理
两个日志+三个线程
基于行的复制和基于语句的复制,这两种方式都是通过在主库上记录二进制日志,然后在备库重放日志的方式来实现异步的数据复制。
1、在主库上把数据更改记录到二进制日志中,bin_log
在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志中,按事务提交的顺序记录,记录完成后,主库会告诉存储引擎可以提交事务了。
2、备库将主库二进制日志复制到中继日志中,relay_log
备库启动一个IO线程,建立一个到主库的普通的客户端连接,然后在主库启动一个特殊的二进制转储线程,binlog dump 这个线程会读取主库上的二进制日志中的事件,如果该线程追上了主库,会进入睡眠状态,备库IO线程会将接收到的事件记录到中继日志中。中继日志并不百分百的可信。
3、备库读取终极日志中的事件,将其重放到备库数据上。
备库的sql线程执行最后一步,该线程从中继日志读取事件并在备库执行,从而实现备库数据的更新。
瓶颈:在主库上并发执行的查询在备库上只能串行的执行,因为只有一个sql线程来重放中继日志中的事件,大多数用户受制于单线程。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29974949/viewspace-1767369/
,如需转载,请注明出处,否则将追究法律责任。