在 MySQL 中,可以通过以下几种方式指定数据库连接的超时时长:
1. 连接字符串(DSN)中指定超时参数
connect_timeout
:建立连接时的超时时间(单位:秒)。read_timeout
:从服务器读取数据的超时时间(单位:秒)。write_timeout
:向服务器写入数据的超时时间(单位:秒)。
示例(以常见编程语言为例):
#### Python(使用 mysql-connector-python
):
import mysql.connector
config = {
'user': 'username',
'password': 'password',
'host': '127.0.0.1',
'database': 'test_db',
'connect_timeout': 30, # 连接超时 30 秒
'read_timeout': 60, # 读取超时 60 秒
'write_timeout': 60 # 写入超时 60 秒
}
conn = mysql.connector.connect(**config)
#### PHP(PDO):
$dsn = 'mysql:host=127.0.0.1;dbname=test_db;charset=utf8';
$options = [
PDO::ATTR_TIMEOUT => 30, // 连接超时(部分驱动可能不支持)
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET SESSION wait_timeout=60', // 会话超时
];
$pdo = new PDO($dsn, $username, $password, $options);
#### Java(JDBC): 在 JDBC URL 中添加参数:
String url = "jdbc:mysql://localhost:3306/test_db?connectTimeout=30000&socketTimeout=60000";
// connectTimeout: 连接超时(毫秒)
// socketTimeout: Socket 读写超时(毫秒)
Connection conn = DriverManager.getConnection(url, user, password);
2. MySQL服务器配置
如果需调整服务器端的超时行为,可修改以下参数(需权限):
wait_timeout
:非交互式连接的空闲超时时间(默认 28800 秒)。interactive_timeout
:交互式连接的空闲超时时间(默认 28800 秒)。
通过 SQL 修改:
SET GLOBAL wait_timeout = 60;
SET GLOBAL interactive_timeout = 60;
或直接在 my.cnf
配置文件中修改:
[mysqld]
wait_timeout = 60
interactive_timeout = 60
3. 注意事项
- 客户端与服务器端超时的区别:
客户端超时(如connect_timeout
)控制连接建立的等待时间,而服务器端超时(如wait_timeout
)控制连接空闲的断开时间。 - 驱动兼容性:
不同编程语言的 MySQL驱动支持的参数可能略有差异,需参考具体文档。 - 单位差异:
部分驱动使用秒,而某些驱动(如 JDBC)使用毫秒,需注意转换。
如果需要进一步优化数据库连接的稳定性和性能,可以结合具体场景调整超时值。
内容由零声教学AI助手提供,问题来源于学员提问