提高 MySQL 的 open files limit


对于中高用量的 MySQL 服务器, 提高 max_connections 是必然的设定, 不然便会出现 too many connections 错误。但 max_connections 这个数值不可以任意提高的, 如果设定太高, 会出以类似以下的错误:

[Warning] Changed limits: max_open_files: 1024 max_connections: 214 table_cache: 256

例如设定 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:

# vi /etc/security/limits.conf

例如我想将 open files limit 提高到 10240, 加入以下两行:

然后开启 /lib/systemd/system/mysql.service:

# vi /lib/systemd/system/mysql.service

在 [Service] 段落, 加入以下两行:

然后重新加载启动 MySQL, 由于改动了 /lib/systemd/system/mysql.service, 需要先执行 systemctl daemon-reload:

# systemctl daemon-reload
# systemctl restart mysql

想检查 MySQL 的 open files limit 确认, 可以这样, 先登入 MySQL:

# mysql -u root -p

执行以下指令:

如果设定正确, 会看到以下内容:

No Responses

Leave a Reply