MySQL open_files_limit - 无法更改此变量

use*_*601 18 mysql

我遇到了问题,因为我的open_files_limitfor mysql 只有1024.

Centos 7、MySQL 社区服务器 5.6.22-log

它实际上是一个专用于 WHM 服务器(远程 mysql)的 mysql 的 vps,但这应该无关紧要。


配置文件

my.cnf

[mysqld]
open_files_limit = 100000
open-files-limit = 100000 #I've read that the dashes are required on older versions, but I threw it in anyway.
innodb_buffer_pool_size = 600M
...

# and the same for mysqld_safe
[mysqld_safe]
open_files_limit = 100000
open-files-limit = 100000
...
Run Code Online (Sandbox Code Playgroud)

/etc/security/limits.conf

*       hard    nofile  100000
*       soft    nofile  100000
Run Code Online (Sandbox Code Playgroud)

命令输出

我的 root 操作系统 open_files_limit:

[root@mack ~]# ulimit -Hn -Sn
open files                      (-n) 100000
open files                      (-n) 100000
Run Code Online (Sandbox Code Playgroud)

然后作为 mysql 用户:

[root@mack ~]# su mysql
bash-4.2$ ulimit -Hn -Sn
open files                      (-n) 100000
open files                      (-n) 100000
Run Code Online (Sandbox Code Playgroud)

MySQL状态:

[root@mack ~]# service mysql status
Redirecting to /bin/systemctl status  mysql.service
mysqld.service - MySQL Community Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)
   Active: active (running) since Wed 2014-12-24 10:41:09 EST; 40min ago
  Process: 2982 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
  Process: 2970 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
 Main PID: 2981 (mysqld_safe)
   CGroup: /system.slice/mysqld.service
           ââ2981 /bin/sh /usr/bin/mysqld_safe
           ââ3268 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --open-files-limit=100000 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/my...

Dec 24 10:41:08 mack systemd[1]: Starting MySQL Community Server...
Dec 24 10:41:09 mack mysqld_safe[2981]: 141224 10:41:09 mysqld_safe Logging to '/var/log/mysqld.log'.
Dec 24 10:41:09 mack mysqld_safe[2981]: 141224 10:41:09 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
Dec 24 10:41:09 mack systemd[1]: Started MySQL Community Server.
Run Code Online (Sandbox Code Playgroud)

我已经重新启动 mysql,停止,检查状态以确保它停止,然后启动它,并重新启动整个系统。

有效的证据my.cnf

mysql> show global variables like '%buffer_pool_size%';
+-------------------------+-----------+
| Variable_name           | Value     |
+-------------------------+-----------+
| innodb_buffer_pool_size | 629145600 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

现在我的血压升高了:

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?是否有另一个 my.cnf 覆盖了我的值?

[root@mack ~]# find / -name "*.cnf"
/usr/share/mysql/my-default.cnf
/usr/share/doc/mysql-community-server-5.6.22/my-default.cnf
/var/lib/mysql/auto.cnf
/etc/my.cnf
/etc/pki/tls/openssl.cnf
Run Code Online (Sandbox Code Playgroud)

我查看了所有这些,但没有提到 open_files_limit。对于它,我grep会通过这些寻找设置:

[root@mack ~]# grep -r "open_files_limit" /etc
/etc/my.cnf:open_files_limit = 100000
/etc/my.cnf:open_files_limit = 100000
[root@mack ~]# grep -r "open_files_limit" /var
[root@mack ~]# grep -r "open_files_limit" /usr
/usr/share/vim/vim74/syntax/ora.vim:syn keyword oraKeywordUnd     _number_cached_attributes _offline_rollback_segments _open_files_limit
Binary file /usr/sbin/mysqld matches
Binary file /usr/sbin/mysqld-debug matches
Binary file /usr/bin/mysqlbinlog matches
/usr/bin/mysqld_safe:      --open_files_limit=*) open_files="$val" ;;
Run Code Online (Sandbox Code Playgroud)

但不,他们不影响它。

use*_*601 20

我需要编辑/usr/lib/systemd/system/mysqld.service和添加

LimitNOFILE=infinity
LimitMEMLOCK=infinity
Run Code Online (Sandbox Code Playgroud)

然后运行systemctl daemon-reloadsystemctl restart mysql.service

现在由于65536某种未知的原因,变量被限制了,但我现在可以接受。

https://unix.stackexchange.com/questions/152186/mysql-max-open-files-more-than-1024#answer-157910找到这个

  • /usr/lib/ 文件包含一个警告,不要编辑它。对于 Centos7 上的 MariaDB,我在 `/etc/systemd/system/mariadb.service.d/limits.conf` 创建了一个文件,内容如下 `[Service]` `LimitNOFILE=infinity` `LimitMEMLOCK=infinity` (4认同)