在数据源MySQL连接有效性测试:选择1或更好的东西?(MySQL connection valid

2019-06-25 09:41发布

我设置了一个故障转移群集上的MySQL,在主/从结构。 我也在我的配置JBoss的数据源,和我在寻找更好的方式来测试我的连接,知道它是露天(这是使用iBATIS)。

即使我praticed MySQL的很多次,我不知道相当不错,在MySQL服务器执行的内部机制。

(:在这个线程就像到目前为止,我使用这个查询来测试我的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>

我有我不能由我自己来回答多个问题:

  • 这会不会简单的查询,通过驿站(或任何种类或ORM)被缓存? 这意味着,它可以返回我错误的结果。
  • 不就是查询是太简单了? 难道真的试图执行,这将是代表服务器运行状况的内部机制? 还是会仅测试连接?
  • 难道真的是一个可靠的测试?
  • 是否有任何其他类型的测试中(已经与连接器/ J集成为例)?
  • 性能对我来说也很重要,所以选择1是健康检查和性能之间的良好折衷

不要犹豫,指向我了一些链接(内部或#1没有)。 如果这个问题有豆已经回答了(这似乎不是,因为我搜索远),我显然会删除此线程。

我将非常感激的MySQL developpers或管理员exeperience的回报。 我在寻找做到这一点的最好办法。

谢谢你的帮助。

Answer 1:

引用链接: 平安MySQL服务器使用JDBC

你必须:

MySQL的JDBC驱动器(连接器/ J)提供了一个平的机制。

如果你做/ *平前置一个SQL查询* /例如:

“/ * *平/ SELECT 1”这实际上会导致驾驶员发送ping到服务器,并返回假的,重量轻,结果集。

(你可以找到这个埋在连接器/ J文档中相当深;搜索“平”该网页上仔细阅读:。这个机制是使用的语法非常敏感不像大多数SQL中,在“平的“解析” “标记发生在客户端JDBC驱动程序本身)。



Answer 2:

我们在工作中使用,以检查一个MySQL服务器的连接查询是SHOW databases; 因为它并不需要你选择了一个特定的数据库,这是很好而且非常简单。 我会说这是相当可靠的,像这样的查询是非常有效的。



文章来源: MySQL connection validity test in datasource : SELECT 1 or something better?