数据库同步过程,最严格的指标:
第一是效率,即每秒同步SQL条数;
第二是一致性,即主库产生的数据,备库同步后是否一致;
第三是完整性,即当同步的各个环节出现问题时,如何考虑出错处理;
下面分别讨论并进行测试方案合理性分析,如下:
第一、效率
同步测试的两个表都增加:精确到毫秒的创建时间和修改时间字段,用于对比数据同步的整体效率。具体效率测试:
数据库同步过程主要分为四个阶段,即抽取、分析、传输、装载。
抽取过程:主要是实时读取数据库日志,这部分理论上可以作到毫秒级别间隔作到实时抽取,具体指标的测算方法:在代码里面增加Logger记录数据从Mysql日志里面抽取出来的时刻,与源表里面精确到毫秒的数据创建时间
或者修改时间进行对比,计算出抽取的效率;
分析过程:具体指标的测算方法:在代码里面增加Logger记录数据分析完毕,从一个节点发送的时刻,与Logger里面记录的数据从Mysql日志里面抽取出来的时刻进行对比,计算出分析的效率;
传输过程:将数据从一个节点传递到另一个节点,具体指标的测算方法:在代码里面增加Logger记录数据在另一个节点的接受时刻,与Logger里面记录的数据从一个节点发送的时刻进行对比,计算出传输的效率;
装载过程:主要是根据分析组件的结果进行备库SQL语句的装载,并发装载是提高效率的唯一方法。具体指标的测算方法:目标表里面精确到毫秒的数据创建时间或者修改时间与数据在另一个节点的接受时刻进行对比,计算出装
载的效率;
第二、一致性
在代码里面增加Logger记录从mysql日志中提取的SQL语句与装载前的SQL语句。
1、提取日志(Analysis Log)
就是即将装载到备库的SQL语句,这部分是装载正确的根本,这部分数据如果正确了,则保证了数据源的正确。
2、装载日志(Upload Log)
就是装载数据时的SQL语句,这部分能定位备库装载数据错误时,错误出现在哪个环节。
通过以上两个日志基本能保证同步过程中的错误捕捉,同时配合同步数据定时检查程序(此时数据需要主、备库检查过程中不能更改数据)和应用程序连接备库随机抽查(常态化)两个辅助检查方式验证数据的一致性。
第三、完整性
数据库的完整性,主要从容错机制来考虑,例如出现下面错误情况时需要同步程序能够自动恢复:
1、源库断电或重起(人为执行mysql服务的重启)
2、源库SHUTDOWN(人为停止mysql服务)
3、源库网络断(人为拔网线)
4、备库断电或重起(人为执行mysql服务的重启)
5、备库SHUTDOWN(人为停止mysql服务)
6、备库网络断(人为拔网线)
7、同步程序SHUTDOWN并重启(人为停止服务后,隔一段时间启动服务)
针对上面主要几种情况,测试同步程序能够续抽、续传,最后保证数据一致性。
实施步骤:
1、按照以上设计改造完毕代码,增加对应LOGGER。
2、在局域网内,选择两台机器,搭建好对应数据库与数据表(带创建时间和更新时间),预先准备好一套SQL语句集合(用于SQL比对)。
3、开发一套同步数据定时检查程序。
4、按照完整性的各个场景执行模拟演练。