当前位置: 首页 > 知识库问答 >
问题:

在JBoss 7.1.1中为MySQL集群创建XA数据源:连接只读错误

龙欣德
2023-03-14

我们正在JBoss7.1.1应用服务器中为后端集群MySQL服务器配置XA数据源(主-主配置)。以下是数据源配置:

<xa-datasource jndi-name="java:/datasoucrenew" pool-name="datasoucrenew" enabled="true" use-ccm="false">
                    <xa-datasource-property name="URL">
                        jdbc:mysql://10.2.0.35:3306,10.2.0.36:3306/test_prod?autoReconnect=true
                    </xa-datasource-property>
                    <xa-datasource-property name="password">
                        password
                    </xa-datasource-property>
                    <xa-datasource-property name="user">
                        user
                    </xa-datasource-property>
                    <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
                    <driver>mysql-connector-java-5.1.12-bin.jar</driver>
                    <xa-pool>
                        <min-pool-size>0</min-pool-size>
                        <max-pool-size>100</max-pool-size>
                        <use-strict-min>true</use-strict-min>
                        <is-same-rm-override>false</is-same-rm-override>
                        <interleaving>false</interleaving>
                        <pad-xid>false</pad-xid>
                        <wrap-xa-resource>false</wrap-xa-resource>
                    </xa-pool>
                    <security>
                        <user-name>user</user-name>
                        <password>password</password>
                    </security>
                    <validation>
                        <validate-on-match>false</validate-on-match>
                        <background-validation>false</background-validation>
                        <exception-sorter class-name="org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter"/>
                    </validation>
                    <statement>
                        <share-prepared-statements>false</share-prepared-statements>
                    </statement>
                </xa-datasource>

我们面临以下问题:

  1. 在DB URL jdbc:mysql:/10.2.0.35:3306,10.2.0.36:3306/test_prod?autoreconnect=true中,如果10.27.40.35服务器关闭,则给出以下异常。但是如果我将URL配置反向为jdbc:mysql:/10.2.0.36:3306,10.2.0.35:3306/test_prod?autoreconnect=true,它就可以正常工作。你能帮我找出是什么引起这个问题吗?

一开始我想这是一个司机的问题。但使用相同的驱动程序,当我运行独立应用程序时,它没有任何问题。

12:06:08,782 ERROR [stderr] (MSC service thread 1-1) com.mysql.jdbc.jdbc2.optional.MysqlXAException: **Connection is read-only. Queries leading to data modificati
on are not allowed.**
12:06:08,784 ERROR [stderr] (MSC service thread 1-1)    at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.mapXAExceptionFromSQLException(MysqlXAConnection.java
:607)
12:06:08,788 ERROR [stderr] (MSC service thread 1-1)    at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.dispatchCommand(MysqlXAConnection.java:586)
12:06:08,790 ERROR [stderr] (MSC service thread 1-1)    at com.mysql.jdbc.jdbc2.optional.MysqlXAConnection.start(MysqlXAConnection.java:526)
12:06:08,793 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.adapters.jdbc.xa.XAManagedConnection.start(XAManagedConnection.java:259)
12:06:08,796 ERROR [stderr] (MSC service thread 1-1)    at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.j
ava:636)
12:06:08,799 ERROR [stderr] (MSC service thread 1-1)    at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.j
ava:397)
12:06:08,802 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener$TransactionSynchronization.enlist(
TxConnectionListener.java:587)
12:06:08,806 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.enlist(TxConnectionListener.java:2
64)
12:06:08,809 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnec
tionManagerImpl.java:467)
12:06:08,813 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractCon
nectionManager.java:599)
12:06:08,817 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionM
anager.java:467)
12:06:08,819 ERROR [stderr] (MSC service thread 1-1)    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:129)
12:06:08,821 ERROR [stderr] (MSC service thread 1-1)    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceCon

注意:我们使用的是mysql-connector-java-5.1.12-bin.jar mysql驱动程序,因为最新版本21或24或27给出了以下错误:

java.lang.ClassCastException: $Proxy0 cannot be cast to com.mysql.jdbc.ConnectionImpl
Completed
    at com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.wrapConnection(MysqlXADataSource.java:76)
    at com.mysql.jdbc.jdbc2.optional.MysqlXADataSource.getXAConnection(MysqlXADataSource.java:52)

真的很感谢你的回答来解决这个问题。

问候,

曼朱纳特

共有1个答案

督烨赫
2023-03-14

请尝试将jdbc:mysql:替换为jdbc:mysql:loadbalance:。它应该使第二个服务器能够以读/写方式访问,而不是只读方式访问。

伊利亚·布尔

 类似资料:
  • 我创建了一个ssl mongodb连接,如下所示 但在那之后,其他外部rest调用(用于翻译api,google的示例获取语言)失败,并给出以下错误。 由:sun.security.validator.validatoreXception:PKIX路径生成失败:sun.security.provider.certPath.SunCertPathBuilderException:找不到请求目标的有效

  • 我想创建一个在MySQL中拥有自己数据库所有权限的用户。 当我使用这个用户创建一个表时,MySQL返回SQL server正在使用只读选项运行。 但是,当我改变到另一个现有用户的所有权限上,我可以创建表没有错误。 我想知道只读选项是全局的还是什么? 以下是我使用MySQL root的MySQL命令: 然后我切换到用户"demo": 所以我检查了只读选项,它似乎是打开的。 然而,我尝试使用另一个用户

  • 我可以连接到嵌入式h2数据库,但对于连接到名为“test1”的mysql数据库的正确语法感到困惑。例如,我想知道在pom中替换什么。xml,网络。xml和持久性。xml文件,而不是h2术语。我使用的是mysql 5.7.27和mysql-connector-java-8.0.27。jar位于我的src/main/resources/META-INF/lib文件夹中。我的url是jdbc:mysql

  • 我所有的Redis服务器配置如下: 大师:192.168.0.106:7001,192.168.0.1057001,192.168.0.112:7001 从属:192.168.0.106:7002192.168.0.105:7002192.168.0.122:7002 其中192.168.0.106:7002服务器是192.168.0.106:7001服务器的从属服务器等等。我有所有的服务器上an

  • 我的问题是关于创建实体集合的。我知道“如何嵌入收集表单”,并成功地使用了它。但在这种情况下,我有: 简单类 文体词典 我不需要为DicStyle对象创建表单,因为这是只读对象=字典(不可更改)。所以,我想创建一个类似这样的表单: 当然是伪代码。我无法想象如何实施它。 结果 假设我有: 表“Thing”有一行(id=1)。 在表单中,我为这个东西选择了两个DicStyle(id=3,id=5)。因此