我正在主/从架构中的 MySQL 上设置故障转移集群。我还在配置我的 JBoss 数据源,并且我正在寻找更好的方法来测试我的连接,因为我知道它适用于 Alfresco(使用 Ibatis)。
即使我多次练习 MySQL,我也不太了解 MySQL Server 中的内部执行机制。
到目前为止,我正在使用此查询来测试我的 SQL 连接(如在此线程中:Jboss 数据源中的数据库故障转移)
SELECT 1;
这里是完整的数据源。
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>alfresco-datasource</jndi-name>
<connection-url>
jdbc:mysql://10.1.2.13,10.1.2.14:3306/alfresco
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>alfresco</user-name>
<password>alfresco</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
</exception-sorter-class-name>
<connection-property name="readOnly">false</connection-property>
<failOverReadOnly>false</failOverReadOnly>
<!-- Automatic reconnecion - desactivated to preserve transactions -->
<!-- http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html :
Failover happens when the driver determines that the connection has failed (checked before every query), and falls back to the first host when it determines that the host has become available again (after queriesBeforeRetryMaster queries have been issued). -->
<!--<autoReconnect>true</autoReconnect>-->
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<valid-connection-checker-class-name>
org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker
</valid-connection-checker-class-name>
<!-- If you're using Connector/J 3.1.8 or newer, you can use our implementation
of these to increase the robustness "mysql-ds.xml" 64L, 3683C of the connection
pool. -->
<exception-sorter-class-name>
com.mysql.jdbc.integration.jboss.ExtendedMysqlExceptionSorter
</exception-sorter-class-name>
<valid-connection-checker-class-name>
com.mysql.jdbc.integration.jboss.MysqlValidConnectionChecker
</valid-connection-checker-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
我有多个我无法自己回答的问题:
- Ibatis(或任何类型或 ORM)不会缓存这个简单的查询吗?这意味着它可能会返回错误的结果。
- 这个查询会不会太简单了?它真的试图执行代表服务器健康的内部机制吗?还是只测试连接?
- 这真的是一个可靠的测试吗?
- 是否有任何其他类型的测试(例如已经与 Connector/J 集成)?
- 性能对我来说也很重要,所以 SELECT 1 是健康检查和性能之间的一个很好的折衷方案
不要犹豫,指出一些链接(无论是否在 Stackoverflow 内)。如果这个问题已经回答了(据我搜索似乎没有),我显然会删除这个线程。
我非常感谢 mysql 开发人员或管理员的经验回报。我正在寻找最好的方法来做到这一点。
谢谢你的帮助。