有last_modified_time就万无一失了吗

简介:

线上MySQl增量ETL由于源表没有last_modified_time(timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP),加起来比较有难度(online ddl虽然有工具,不过这些表是比较核心的表并且超过300GB);因此在从库启用了触发器,来记录PK以及对应的modified_time(记录事务的开始时间,这个验证可以简单通过load一个大文件来验证);这样做有几个缺陷:

1.如果主库的DML产生了row format binlog,那么是不会触发从库的trigger

2.这些表的TPS接近double

另外一种方式就是在从库添加last_modified_time column,不过即使有了这么一列抽取的数据就万无一失了吗?看如下序列:

事务T1--235959开启,同时插入一行记录,last_modified_time=23:59:59

ETL 00:00:00开始抽取,记做事务T2,此时T1未提交对T2不可见

事务T1000001提交;


那么该条记录对于ETL来说就丢失了;有什么好的解决方案呢?我现在能想到的就是Change Data Capature了(类似Oracle里的CDCMySQL可以解析binlog来做);欢迎讨论



本文转自MIKE老毕 51CTO博客,原文链接:http://blog.51cto.com/boylook/1298802,如需转载请自行联系原作者



相关文章
|
4月前
恢复时间目标(RTO, Recovery Time Objective)缩短
恢复时间目标(RTO, Recovery Time Objective)缩短
99 2
|
安全 数据库
2022小美赛D题Whether Wildlife Trade Should Be Banned for a Long Time野生动物贸易是否应该被长期禁止思路分享
2022小美赛D题Whether Wildlife Trade Should Be Banned for a Long Time野生动物贸易是否应该被长期禁止思路分享
2022小美赛D题Whether Wildlife Trade Should Be Banned for a Long Time野生动物贸易是否应该被长期禁止思路分享
如何使用time_expire绝对超时时间-参数解读系列
说明:    time_expire,绝对超时时间,格式为yyyy-MM-dd HH:mm。注:1)以支付宝系统时间为准;2)如果和timeout_express参数同时传入,以time_expire为准。
2165 12
|
网络协议 Perl 前端开发