最近工作需要,做一个rdf数据库的主从集群,由于rdf数据库本身不支持主从复制功能,所以考虑从上一层应用实现主从复制。并参考mysql和redis的主从复制实现原理,实现较为简单的主从复制功能。本文分别介绍mysql和redis的主从复制。
1.mysql主从复制
mysql的二进制日志文件,mysql通过该文件进行复制,有两种形式复制,一种基于语句复制,另一种基于行复制。基于语句复制方式,是日志文件保存数据库的执行语句,这种方式存在一些缺陷,如:不能确保所有语句都能正确执行,某些命令语句random()、date()等;update或create语句修改大量数据时,导致锁的范围和时间较长;在mysql5.1之后,不在再提供这种复制方式支持,采用行复制方式。基于行复制方式,是日志文件保存数据库的修改行数据,这种方式较上一种方式的优点相对基于语句复制的方式主要有锁范围较小和确保所有语句能够正确执行,缺点主要有数据恢复时间较长和日志保存数据量大。
下面介绍主从复制过程简单介绍:
1.主库的事务提交后,完成数据更新前,把更新改记录写入到二进制日志文件。
2.备库讲主库中的二进制日志数据复制到中继日志。备份数据库启动一个I/O线程与主库建立连接,读取主库中二进制日志数据。
3.备库读取中继日志,将数据重放到备库中。重放时采用单线程sql从中继日志读取事件,重放读取事件更新数据到备库,完成数据重放,最终使其与主库中数据保持一致。
redis待续……
参考资料:
《高性能mysql》
《redis的设计与实现》