22

我有一个 Java 程序。当我登录时,大约 600,000 毫秒后(我实际上尝试了几次,它总是大约 600,000。这就是为什么我认为在某个地方设置了 600,000 毫秒的超时。)我的数据库连接崩溃并且我的程序不再工作(它总是需要连接到数据库)。它给了我Communication link failure错误。我这是我的mysql连接设置:

import java.sql.*;
import javax.swing.*;
public class mysqlconnect {
    Connection conn = null;
    public static Connection ConnectDb()    {
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://server_name/database_name","user_name","user_password");
            return conn;
        }catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Cant connect to db");
            return null;
        }
    }
}

我尝试将?autoReconnect=true&添加tcpKeepAlive到我的代码中,但没有运气。有没有办法去 phpmyadmin 并在那里更改一些设置(增加超时时间)?

4

4 回答 4

37
SET SESSION wait_timeout = 999999;//or anything you want

从 mysql 命令行会增加超时值。为了能够看到价值:

SHOW VARIABLES LIKE 'wait_timeout';
于 2013-04-24T12:56:21.087 回答
7

您可以提出此请求以在 MySql 中显示您的超时

SHOW VARIABLES LIKE 'connect_timeout';

接下来,您可以将其更新为 60 秒,例如

SET GLOBAL connect_timeout=60;

如果问题是您可以使用的查询 Statement.setQueryTimeout

于 2013-04-24T13:03:14.257 回答
4

您可以通过以下方式设置wait_timeout NET_read_timeoutconnect_timeout解决问题。

SHOW VARIABLES LIKE 'wait_timeout'; SET SESSION wait_timeout = 999999;

SHOW variables LIKE 'NET_read_timeout'; SET SESSION net_read_timeout = 1000;

SHOW VARIABLES LIKE 'connect_timeout'; SET GLOBAL connect_timeout = 1000;

于 2015-05-28T09:20:58.820 回答
0

我通常使用以下任何一种方式来做到这一点:

1) 编辑 my.ini 文件。该文件通常位于 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

[mysqld]
interactive_timeout=2147483
wait_timeout=2147483

(Windows 的最大值为 2147483,其他操作系统的最大值为 31536000)

之后重启机器

2) 在 JDBC url 中包含等待超时参数。这是取自我的代码的 JDBC URL

jdbc:mysql://HOST:PORT/DATABASE_NAME?autoReconnect=true&sessionVariables=sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH',interactive_timeout=2147483, wait_timeout=2147483

于 2019-08-23T14:49:33.853 回答