为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:麒麟
【CPU】:鲲鹏
【问题描述】*:
数据库一主一从。
主:192.168.83.101 PRIMARY模式
从:192.168.83.102 STANDBY模式
dm_svc.conf文件 已经放到 /etc/ 下,文件配置如下:
TIME_ZONE=(480)
LANGUAGE=(cn)
MYDW=(192.168.83.101:5236,192.168.83.102:5236)
[MYDW]
# 连接重试次数
SWITCH_TIMES=(3)
# 服务器之间切换的时间间隔,单位为毫秒
SWITCH_INTERVAL=(100)
# 表示连接数据库时采用何种模型建立连接,
# 0:依次选取列表中的不同节点建立连接,使得所有连接均匀地分布在各个节点上;
# 1:选择列表中最前面的节点建立连接,只有当前节点无法建# 设置连接字符集
EP_SELECTOR=(1)
# 连接发生异常或一些特殊场景下连接处理策略.
# 0:关闭连接,
# 1:当连接发生异常时自动切换到其他库,无论切换成功还是失败都会抛一个 SQLEXCEPTION,用于通知上层应用进行事务执行失败时的相关处理;
# 2 配合 EP_SELECTOR=1 使用,如果服务名列表前面的节点恢复了,将当前连接切换到前面的节点上
AUTO_RECONNECT=(2)
# 0:优先连接 PRIMARY 模式的库,NORMAL 模式次之,最后选择 STANTBY 模式
# 1:只连接主库
# 2:只连接备库;
# 3:优先连接 STANDBY 模式的库,PRIMARY 模式次之,最后选择 NORMAL 模式
# 4:优先连接 NORMAL 模式的库,PRIMARY 模式次之,最后选择 STANDBY 模式。默认值。
LOGIN_MODE=(0)
# PG_UTF8 : UTF-8
# PG_GBK/PG_GB18030 :两者都表示 GBK
# PG_BIG5: BIG5
# PG_ISO_8859_9: ISO88599立连接时才会选择下一个节点进行连接。
# PG_EUC_JP:EUC_JP
# PG_EUC_KR: EUC_KR
# PG_KOI8R: KOI8R
# PG_ISO_8859_1: ISO_8859_1
CHAR_CODE=(PG_UTF8)
# 是否开启读写分离。
# 0. 关闭,默认。
# 1. 开启
# 2. 开启, 从节点由客户端进行选择,且只会选择服务名中配置的节点
RW_SEPARATE=(0)
# 读写分离分发比例。0-100.默认25
RW_PERCENT=(25)
spring.datasource.url=jdbc:dm://MYDW/ZHANG2018
连接配置没有问题,能正常访问连接到数据库,但是因为数据库出现异常导致主从发生改变。
改变后的主从变成了如下:
从:192.168.83.101 STANDBY模式(原来的主节点)
主:192.168.83.102 PRIMARY模式(原来的从节点)
但是,java程序操作数据库的时候提示异常:
dm.jdbc.driver.DMException: 试图在STANDBY模式下,修改用户库
如下图:
明显就是springboot连接到的还是 192.168.83.101 节点,此时该192.168.83.101已经是从节点了,并不会自动切换连接到新的主节点192.168.83.102上。
1、已存在的请求连接到备库操作导致
2、spring boot可以配置检测连接池机制,连接池进行检测验证