TxSQL主备切换导致connection read-only报错

  其他常见问题
内容纲要

概要描述


workflow定时调度任务只执行了一次,后面两次均失败,在workflow日志中发现有如下报错:

Caused by: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)

详细说明


workflow 的元数据在 TxSQL 中保存,workflow 跑任务的时候与元数据库 TxSQL 有交互,如果在交互过程中发生了主备切换,则会出现 read-only 的问题;

假设 TxSQL 的 jdbc 连接串配置为:

jdbc:mysql://node1:3306,node2:3306/manager?autoReconnect=true&createDatabaseIfNotExist=false&characterEncoding=UTF-8,

如果 node1 机器(即连接串上填写的第一台机器)上的TxSQL挂掉了,jdbc 连接切换到 node2 之后会变成 read-only,原因是 jdbc 有个默认参数 failOverReadOnly=true,就会出现切换之后将不能写TxSQL,只能read-only。

该问题最终修复版是 TDH 6.0,当前的解决方案是修改元数据库的连接串;

解决方案

去当前 TDH 版本的 metainfo 目录,比如我这里是 :/var/lib/transwarp-manager/master/content/meta/services/WORKFLOW/transwarp-5.1.1-final/templates,修改目录下的 db.properties 里的连接,加上 failOverReadOnly=false 这个参数,然后重启 manager,然后配置 workflow 服务,最后重启 workflow 即可解决。

修改前连接串:

jdbc:mysql://node1:3306,node2:3306/manager?autoReconnect=true&createDatabaseIfNotExist=false&characterEncoding=UTF-8

修改后连接串:

jdbc:mysql://node1:3306,node2:3306/manager?failOverReadOnly=false&autoReconnect=true&createDatabaseIfNotExist=false&characterEncoding=UTF-8

file

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。