1.Mysql的主从复制的原理
主从同步的原理如下:
同步的过程为
(1)主库中的每一个事务在操作数据后,主库会将该操作dump出来,写入到二进制文件binlog中,binlog其实就是一系列的SQL语句。
(2)主库启动一个名称为dump线程,来与从库进行通信。
(3)从库的I/O thread通过主库的dump线程获取主库的binlog数据,并写入从库本地的relaylog,即中继log中。
(4)从库的SQL thread读取从库的relaylog,并将其在从库中回放执行
2.关于binlog日志
mysql中binlog是二进制日志,它有三种格式,
(1)STATEMENT格式,该格式是基于sql语句,就是将有变更的sql语句写入到binlog日志中;
(2)ROW格式,该格式是基于行的,也就是语句数据库表中记录修改的,将记录的修改内容等信息记录在binlog中;
(3)MIXED格式,该格式是STATEMENT和ROW的混合使用。
针对这三种binlog日志格式,在主从复制或备份还原时,就有三种的复制方式,
(1)基于SQL语句的复制(statement-based replication, SBR);
(2)基于行的复制(row-based replication, RBR);
(3)混合模式复制(mixed-based replication, MBR)。
我们可以使用mysqlbinlog工具查看binlog文件的内容,也可以使用编程语言按照binlog的格式去解析binlog数据。
3.目前基于主从复制机制中binlog的实时获取和解析来实现数据库“变更抓取”系统的开源项目有:
LinkedIn的DataBus项目
Alibaba的canal项目
学习资料参考:
http://www.cnblogs.com/fxjwind/archive/2013/03/05/2944864.html
http://highscalability.com/blog/2012/3/19/linkedin-creating-a-low-latency-change-data-capture-system-w.html
http://www.csdn.net/article/1970-01-01/2814280
http://blog.csdn.net/mycwq/article/details/17136001
http://pangge.blog.51cto.com/6013757/1299028