Appearance
数据库镜像常见问题
注意:镜像优先推荐同版本数据库之间做镜像
1、目的数据库日志记录错误信息 E insert into point unable to open database file
数据库master.db变成了只读属性,导致相关测点信息变更失败
2、目的数据库容量受限,导致测点无法建立
查看数据库日志,存在超限记录
W manager CreateObject: number of object reaches limitation
3、目的服务器时区不正确,数据发送失败
源服务器为正常的北京时间,而目的服务器为UTC时间,时区未配置正确。默认数据库不支持超过8小时差距的实时数据,导致数据无法发送。
解决方法:修正服务器时区,确保两侧均为北京时间。
表现:网络通,DAS用户配置正确,大数据包中存在数据发送记录,但是目的库未接收到数据。
4、replicator.xml文件格式错误
查看源端系统日志log/openPlant.log,存在记录:
M sync Replicator 0 loading error -1
检查config/replicator.xml,修正文件后重启;
5、replicator.xml文件配置信息无效
查看源端config/replicator.xml, 镜像配置被注释;
修正文件后重启源数据库;
6、镜像文件中目的数据库IP、PORT、映射对象等信息有误
检查源端config/replicator.xml,检查镜像目的IP、PORT、映射对象等配置信息,确保镜像配置正确。
7、镜像过隔离器未配置TCP/UDP通路
配置隔离器规则,增加数据库间TCP和UDP通路。
8、镜像过隔离器未配置DAS用户
过隔离器做镜像,需要在目的数据库上增加一个DAS用户,IP指向主服务器的虚拟IP。密码为空即可
9、镜像过隔离器两侧数据库版本不一致
过隔离器做镜像,两侧数据库版本不一致
10、过隔离镜像配置正确,DAS配置正确,但是抓包无数据。
源或者目的服务器,网卡设备故障。
11、目的端数据删除后,主从镜像关系被破坏
查看目的端config/trash.db,检查目的测点是否被删除;
删除trash.db,重启源数据库重新建立镜像关系;
12、数据库历史数据未同步
源端历史镜像文件历史记录不全
查看源端config/archive-xx.xx.xx.xx.db文件,archive表中记录测点历史中断信息,请检查不同步时间段是否正确;
13、数据库实时数据同步延迟
网络带宽、速率等限制导致
导入sync检查点表,查看实时/历史数据同步进度。
14、一个数据库是否可以往两个镜像库发数据
可以通过镜像实现,3.0以及4.0版本数据库均可实现;
V3.0数据库在镜像时需要配置两个端口相同的不同ip。ip后加逗号实现;
V4.0修改源端config/replicator.xml,配置多个数据库
15、数据库镜像时,计算点如何镜像
镜像配置文件XF字段决定,XF=0,保持计算点属性不变;XF=1,计算点镜像为DAS点
16、高版本往低版本数据库做镜可能无法同步数据
升级到同版本数据库或者高于4.0.18或者5.0.7版本。因为后续版本更新增加了新的字段,会导致高版本往低版本镜像不通
17、镜像文件配置正确,但镜像不通,且报错加载镜像文件error -1
2022-06-13 21:16:51 M global network service started
2022-06-13 21:17:53 M sync replica 0 sid 949099749, v5.0.9, delta time 7, wall 0
2022-06-13 21:17:53 M sync replica 1 sid 716773025, v5.0.9, delta time 7, wall 0
2022-06-13 21:19:53 M sync Replicator 0 loading error -1
2022-06-13 21:19:53 M sync replica 0 sid 949099749, v5.0.9, delta time 6, wall 0
2022-06-13 21:19:53 M sync Replicator 0 loading error -1
2022-06-13 21:19:53 M sync replica 1 sid 716773025, v5.0.9, delta time 6, wall 0
排查问题后解决方法为:
专线的MTU值问题,大包过不去,发送的数据应该是1480的,加上包头,超过了1500,客户的MTU应该是不到1480,所以三次握手后,有一部分数据丢弃,校验不成功,可以在路由器出接口强制分片,数据包分割成1200的小包,顺利通过
18、数据库服务器源和目的scheme.xml定义的点名长度不同,导致-108,建点失败
因为源数据库修改scheme.xml中测点名称长度,导致目的库无法建立测点,产生脏数据。 需要通过工具打开master.db文件,删除不符合条件的脏数据。
19、数据库服务器未关闭防火墙
服务器需要支持数据库端口如8200的tcp和udp通过防火墙,如果开启防火墙或者端口未支持通过,则无法实现数据镜像传输
20、replicator.xml文件格式错误
查看源端系统日志log/openPlant.log,存在记录:
M sync Replicator 0 loading error -1
检查config/replicator.xml,修正文件后重启;
21、replicator.xml文件配置信息无效
查看源端config/replicator.xml, 镜像配置被注释;
修正文件后重启源数据库;
22、镜像文件中目的数据库IP、PORT、映射对象等信息有误
检查源端config/replicator.xml,检查镜像目的IP、PORT、映射对象等配置信息,确保镜像配置正确。
23、镜像过隔离器未配置TCP/UDP通路
配置隔离器规则,增加数据库间TCP和UDP通路。
24、镜像过隔离器未配置DAS用户
过隔离器做镜像,需要在目的数据库上增加一个DAS用户,IP指向主服务器的虚拟IP。密码为空即可
25、镜像日志显示发送成功,但是目的测未收到数据
可能原因:
1、网络路由丢失,导致数据未发送至目的服务器,使用tarceroute检查到目的侧IP的路由情况,若路由丢失,则需重新配置路由规则。
26、镜像部分成功,部分测点/数据未成功
可以尝试如下方式,重新建立镜像关系:
1、修改源侧节点/测点信息,比如编辑一下描述,然后改回,看动态变化能不能重新镜像;
2、源库删除data目录sync-xxx.db,重启源,可以的话目的侧也可以重启。
27、镜像过隔离器数据不通检测方法
可按照步骤一步步检测:
1、基础数据镜像功能配置生效,可跳过隔离器直连检测。
2、不过隔离器,在镜像端增加DAS用户,IP指向主库。检测数据库模拟隔离环境是否通过。
3、排除所有交换机,通过隔离器工具检测隔离器功能是否能在正确配置下生效。
4、以上条件通过后,将数据库和隔离环境恢复,如果不通,检测隔离器是否限制发包大小。数据库发包大小修改为config.xml中的mirrorSize。
5、部分隔离器,需要双向ping(源ping目的,目的ping源),方可触发规则生效。
6、南瑞新版隔离器V1.8.0+,需要V4.0.24和V5.0.6+以上版本方可支持,且隔离器需调整参数:正确应答最小比例(50)%,单bit超时时间(15)秒。
28、目的端数据删除后,主从镜像关系被破坏
查看目的端config/trash.db,检查目的测点是否被删除;
删除trash.db,重启源数据库重新建立镜像关系;
29、多路镜像数据问题
背景:原镜像数据关系为:A->B,A->C,正常运行;后修改镜像关系:增加B->C镜像,同时中断A和C之间网络连接,A侧配置未变更,期望实现A->B->C。
问题:B数据无法发送到C。
原因:数据库存在重复数据去重机制,原来A同时发送数据到B和C时,两路数据已经被标记好。调整后A->B->C, 因为未去掉A侧配置的B和C镜像关系,所以系统默认C侧已经收到A发出的数据,标记的数据是不可能再从B重复发送至C侧的。
30、数据库历史数据未同步
源端历史镜像文件历史记录不全
查看源端config/archive-xx.xx.xx.xx.db文件,archive表中记录测点历史中断信息,请检查不同步时间段是否正确;
31、数据库实时数据同步延迟
网络带宽、速率等限制导致
可建立sync检查点表,查看实时/历史数据同步进度,检查同步是否完成,计算点配置如下表:
点的来源 | 点的类型 | 点名 | 描述 | 计算类型 | 计算公式 |
---|---|---|---|---|---|
CALC | AX | AR_SYNC_STEP | 历史同步步序 | 1 | return op.ar_sync_step() |
CALC | AX | AR_SYNC_USED | 历史同步耗时 | 1 | return op.ar_sync_used() |
CALC | R8 | AR_SYNC_TIME | 历史同步时间 | 1 | return op.ar_sync_time() |
CALC | AX | AR_SYNC_QUEUE | 历史同步队列 | 1 | return op.ar_sync_queue() |
CALC | AX | RT_SYNC_STEP | 实时同步步序 | 1 | return op.rt_sync_step() |
CALC | AX | RT_SYNC_USED | 实时同步耗时 | 1 | return op.rt_sync_used() |
CALC | R8 | RT_SYNC_TIME | 实时同步时间 | 1 | return op.rt_sync_time() |
CALC | AX | RT_SYNC_QUEUE | 实时同步队列 | 1 | return op.rt_sync_queue() |
CALC | AX | AR_SYNC_DONE_0 | 至第一个目的数据库的镜像同步是否完成 | 1 | return op.ar_sync_done(0) |
CALC | AX | AR_SYNC_DONE_1 | 至第二个目的数据库的镜像同步是否完成 | 1 | return op.ar_sync_done(1) |
32、一个数据库是否可以往两个镜像库发数据
可以通过镜像实现,3.0以及4.0版本数据库均可实现;
V3.0数据库要求两个数据库端口相同,不同ip通过ip后加逗号实现;
V4.0修改源端config/replicator.xml,配置多个数据库;
33、数据库镜像时,计算点如何镜像
镜像配置文件XF字段决定,XF=0,保持计算点属性不变;XF=1,计算点镜像为DAS点
34、跨新版隔离器,数据库镜像失败,请调整隔离器参数为:
正确应答最小比例:50%
单bit超时时间:15秒
35、目的库接收实时数据超时,单次数据量过大:
2023-10-20 11:55:11 E service admin@10.73.11.30 request 120, 49, 1332
2023-10-20 11:55:16 E service admin@10.73.11.30 request 120, 49, 2495
120:更新,49:实时数据。