如何以编程方式设置MySQL的最大连接数

53

我有一台服务器,很多用户会连接到它并使用其中的数据库,我正在使用MySQL。我知道MySQL中max_connections的默认数量是100或150,但我确定我需要更多的连接数,因此我使用以下方法来增加该数字:

SET global max_connections = 1000000

现在我尝试按以下方式检查max_connections

show variables like 'max_connections'

它给我以下内容:

max_connections; 100000;

这是表明它成功执行的标志(除非我理解错了)。当我的用户开始连接时,当连接的用户数超过110时,我从服务器接收到错误。该错误为:

连接错误:已超时。在从池中获取连接之前,已经超过了超时时间。这可能是因为所有连接池都正在使用并且达到了最大池大小。

我为什么会收到这个错误,如何解决?


我认为您无法通过编程方式更改max_connections,因为更改该最大值需要重新启动服务器。也许您可以这样做,但可能不应该这样做...? - rodrigo-silveira
嗯,你的意思是我应该进行MySQL的启动设置并从那里选择设置吗? - antf
你需要重新启动服务器,以便新的最大值在你自己连接的上下文之外生效。因此,你需要在设置文件中指定最大变量。 - rodrigo-silveira
1
我会尝试并告诉您发生了什么,谢谢。 - antf
请注意,max_connections 默认设置为 200 是有原因的,将其设置为 1,000,000 对于您的硬件资源来说可能是无意义的。此外,问题可能与此修复程序无关。尝试检查您的 SHOW FULL PROCESSLIST 以了解发生了什么,以及是否真的有很少的连接可用,或者是否是其他原因。请在您的问题中添加这些信息。 - Valerio Bozz
请注意,max_connections 默认设置为 200 是有原因的,将其设置为 1,000,000 对于您的硬件资源来说可能是无意义的。而且,问题可能与此修复无关。请尝试检查您的 SHOW FULL PROCESSLIST,以了解发生了什么,是否确实有很少的可用连接或其他原因。请在您的问题中添加这些信息。 - undefined
3个回答

83

如何修改max_connections

您可以通过SET在MySQL运行时更改max_connections

mysql> SET GLOBAL max_connections = 5000;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE "max_connections";
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 5000  |
+-----------------+-------+
1 row in set (0.00 sec)

给OP的信息

timeout 相关

我以前从未见过你的错误信息,所以我谷歌了一下。可能你正在使用Connector/Net。Connector/Net手册中说有最大连接池大小(默认为100),请参见表22.21。

我建议你将这个值增加到100,000或禁用连接池 Pooling=false

已更新

他有两个问题。

Q1 - 如果我禁用连接池会发生什么? 减缓建立数据库连接的速度。连接池是一个利用已经建立好的数据库连接的机制。建立新连接的成本高。 http://en.wikipedia.org/wiki/Connection_pool

Q2 - 连接池的值是否可以增加或最高只能达到100?

你可以增加,但我不确定最大值是多少,也许在my.cnf中的max_connections.

我的建议是不要关闭连接池,将其值增加100直到没有连接错误。

如果你有压力测试工具,比如JMeter,你可以自己测试。


谢谢Jungsu,我的问题在于连接池而不是最大连接数。我这里有两个小问题:如果我禁用连接池,是否仍然可以支持多个连接?连接池的值是否可以增加,或者最大值是100?从您提供的链接中,我了解到它的最大值为100,我是对的吗? - antf
@antf 我已经更新了我的回答。你还是遇到连接错误吗? - Jason Heo
当我在PhpMyAdmin中运行 SET GLOBAL max_connections = 5000;时,出现以下提示:"Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation"。换句话说:您需要通过SSH登录到您的服务器,然后执行 mysql 命令,接着再运行 SET GLOBAL max_connections = 5000; - Avatar

1

您可以使用以下方式设置最大连接数:

set global max_connections = '1 < 您的数字 > 100000';

这将设置您的MySQL连接数量(需要SUPER权限)。


1

对于Windows系统:

  1. 前往c:\xampp\mysql\bin\my.init
  2. 添加 max_connections = <你的值>,例如 max_connections = 5000

对于Ubuntu系统:

  1. 前往 sudo /opt/lampp/etc/my.cnf/
  2. 添加 max_connections = 你的值,例如 max_connections = 5000
  3. sudo systemctl reload-deamon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接