对于中高用量的 MySQL 服务器, 提高 max_connections 是必然的设定, 不然便会出现 too many connections 错误。但 max_connections 这个数值不可以任意提高的, 如果设定太高, 会出以类似以下的错误:
例如设定 max_connections 到 1000, 系统出现上面 Warning 后, max_connections 会停留在 214.
出现这个问题的原因, 是因为 MySQL 每开启一个连线也会开启一些档案, 如果 MySQL 发现 open files limit (开启档案数量限制) 太小, 不足以应付 max_connections 的设定, 便会自动降低, 只要将这个数值设定高一点便可以, 以下是设定提高 MySQL 的 open files limit 的方法:
要提高 open files limit, 可以分别用设定系统的 ulimit 及 MySQL 参数两个方法完成:
由于只想设定 MySQL 的 open files limit, 以下也只会针对 mysql 帐号 (MySQL 在系统的帐号) 的 open files limit 提高, 开启档案 /etc/security/limits.conf:
例如我想将 open files limit 提高到 10240, 加入以下两行:
|
1 2 |
mysql hard nofile 10240 mysql soft nofile 10240 |
然后开启 /lib/systemd/system/mysql.service:
在 [Service] 段落, 加入以下两行:
|
1 2 |
LimitNOFILE = 10240 LimitMEMLOCK = 10240 |
然后重新加载启动 MySQL, 由于改动了 /lib/systemd/system/mysql.service, 需要先执行 systemctl daemon-reload:
# systemctl restart mysql
想检查 MySQL 的 open files limit 确认, 可以这样, 先登入 MySQL:
执行以下指令:
|
1 |
mysql> show global variables like 'open%'; |
如果设定正确, 会看到以下内容:
|
1 2 3 4 5 6 |
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | open_files_limit | 1024000 | +------------------+--------+ 1 row in set (0.00 sec) |
No Responses