会计/时间跟踪软件(Clients and Profits X)的 Web 界面需要与其 mysql 数据库建立开放连接。目前,Web 界面并未定期使用,因此会超时。当有人确实想要使用 Web 界面时,它会中断,直到我重新启动程序。
我试图将 OSX Snow Leopard 服务器上 mysql 中的 max_timeout 设置为 5 天,但它总是重置为默认值 8 小时。您可以从以下代码片段中看到,我设置了全局变量和会话变量,但在退出并重新登录 mysql 后,会话变量被重置。我并不假装自己是 SQL 专家,所以我可能只是在犯傻。这是在 OSX SL 服务器上,虽然我不知道它是否特定于这个平台。
mysql> set wait_timeout=432000;
Query OK, 0 rows affected (0.00 sec)
mysql> set global wait_timeout=432000;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'wait%';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| wait_timeout | 432000 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'wait%';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| wait_timeout | 432000 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> exit
Bye
osxserver:~ admin$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.0.92-log Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> SHOW VARIABLES LIKE 'wait%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'wait%';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| wait_timeout | 432000 |
+---------------+--------+
1 row in set (0.00 sec)
我在 [mysqld] 下的 /etc/my.cnf 中设置了 wait_timeout,但我不确定这是否设置了会话变量或全局变量
server:~ admin$ grep wait_timeout /etc/my.cnf
wait_timeout = 432000
答案1
您可以查看有关 mysql 的这个错误报告。
http://bugs.mysql.com/bug.php?id=33123
它重点介绍了检查超时设置的几种方法。
然而,从链接中可以得出的主要结论是,wait_timeout可以被用于连接数据库服务器的连接字符串覆盖。
对于交互式客户端,它将会话 wait_timeout 设置为 28,800。有效地覆盖了您的配置设置。因此,这不能用作“测试”来查看它是否正常工作。
只要 C 和 PX 没有在其连接字符串中覆盖该值,那么你就应该没问题。
答案2
您可以尝试使用 init_connect 触发器在每个连接上设置值
例如这里http://shinguz.blogspot.com/2010/02/logging-users-to-mysql-error-log.html
答案3
您的客户端的 .my.cnf 可能有一个 wait_timeout,当您重新登录时,它会将超时重新初始化为 8 小时,从而有效地覆盖该新会话的全局值。此外,由于您的示例使用了 mysql shell,它可能会将您的会话 wait_timeout 设置为 interactive_wait_timeout。此值可以来自全局设置,也可以再次来自您的客户端的 .my.cnf。