mysql读写分离都是yes不更新数据

mysql读写分离都是yes不更新数据,第1张

起因:发现 MySQL Slave 数据库 各项状态正常即SQL 线程 IO线程正常,但就是数据不更新,解决办法每次重启服务 恢复正常。 1.首先要确定主服务器与从服务器的数据库是否一样,比如主数据库有,demo,test,lomo,manage。从数据库也必须有这些数据库。如果主从服务器数据库一致则忽律此步。 2. Slave数据库my.cnf 配置文件添加如下配置 slave_net_timeout=30 配置好之后将从服务器的数据重新从主服务器拉取一下。保持数据跟主服务器一致 重启MySQL服务:service mysqld restart

左右

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参数值按照原有逻辑进行,如果没有按照上述第一种方式进行;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8726822.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存