了解JDBC超时变量和复制

时间:2016-03-22 11:32:30

标签: java mysql jdbc replication database-replication

我正在使用JDBC驱动程序从我的java代码(读取客户端)连接到mySql。

Driver = com.mysql.jdbc.Driver
JdbcUrl = jdbc:mysql://<<IpOftheDb>>/<<DbSchema Name>>?autoReconnect=true&connectTimeout=5000&socketTimeout=10000

如果数据库关闭(托管数据库的机器已启动但mysqld进程未运行),则需要一些时间才能获得异常,例外是

&#34; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。&#34;

在上面的语句中,socketTimeout为10秒。现在,如果我以10秒的速度调出数据库作为SocketTimeout,我会正确得到响应。

但如果我将它减少到一秒并执行查询,我会得到相同的异常。

&#34; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。&#34;

但是connectTimeout不会改变任何东西。有人可以解释一下socketTimeout和connectTimeout的含义。

另外,如果我们正在设置复制并将第二个数据库指定为故障转移,即

我的连接字符串更改为

jdbc:mysql://<<PrimaryDbIP>>,<<SecondaryDbIp>>/<<DbSchema>>?useTimezone=true
&serverTimezone=UTC&useLegacyDatetimeCode=false
    &failOverReadOnly=false&autoReconnect=true&maxReconnects=3
    &initialTimeout=5000&connectTimeout=6000&socketTimeout=6000
    &queriesBeforeRetryMaster=50&secondsBeforeRetryMaster=30

我看到如果主要是关闭,那么我从次要(故障转移Db)得到响应。 现在,当客户端执行查询时,它是否转到主数据库然后等待socketTimeout(或其他),然后转到Secondary或者在超时发生之前转到Seconday。 此外,第二次使用相同的连接对象时,它是直接进入辅助对象还是再次重复上述过程。

我试过找到一些解释这个但却无法解决的文档。

希望有人可以在这里帮助解释各种超时参数及其用途。

0 个答案:

没有答案