MySQL不能直接更新磁盘上的数据,因为MySQL是一个关系型数据库管理系统,它的核心是一个数据库引擎,它以数据文件的形式存储在磁盘上,而不是直接从磁盘上更新数据。MySQL的数据库引擎在每次更新数据时,首先会从磁盘上读取数据,然后在内存中进行更新,最后再将更新后的数据写入磁盘上,这样可以保证数据的一致性和安全性。
update类型的数据无法更新到目标库,通过追踪源码,发现同步源库的binlog日志中UPDATE类型的old参数为null,导致跳出更新程序,无法更新。
仔细检查了目标库的binlog是否开启,以及binlog的格式设置,以及binlog_row_image的设置,均满足官方要求。通过换服务器安装,换目标库等等的尝试发现都无果之后,走上了修改源码的道路。这里定位问题所在为源库MySQL的未知设置问题。
修改com.alibaba.otter.canal.client.adapter.rdb.service.RdbSyncService类中的update方法如下。
第一种方式对binlog中的old参数值不进行判断,直接对所有字段值进行update *** 作;
第二种方式兼容原有逻辑,如果有old参数值按照原有逻辑进行,如果没有按照上述第一种方式进行;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)