web-dev-qa-db-ja.com

Ubuntu 16.04サーバーMySql open_file_limitが65536を超えない

XenServerでUbuntu 16.04 Serverを実行していますが、MySqlのオープンファイルの制限に関する問題が発生しています。

これまでに行ったことは次のとおりです。

Sudo nano /etc/security/limits.conf (参照)

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 102400
* hard nproc 102400
mysql soft nofile 1024000
mysql hard nofile 1024000

Sudo nano /etc/init/mysql.conf (reference)

limit nofile 1024000 1024000
limit nproc 102400 102400

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (reference)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

上記がうまくいかなかったとき、私は次のことを続けました:

Sudo nano /etc/sysctl.conf

fs.file-max = 1024000

Sudo nano /etc/pam.d/common-session

session required pam_limits.so

Sudo nano /etc/pam.d/common-session-noninteractive

session required pam_limits.so

Sudo nano /lib/systemd/system/mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

ユーザーアカウントにログインすると、すべて問題ないように見えます。

ulimit -Hn
1024000
ulimit -Sn
1024000

私がmysqlとしてログインした場合も、見栄えが良いです。

mysql@server:~$ ulimit -Hn
1024000
mysql@server:~$ ulimit -Sn
1024000

ただし、プロシージャを見ると:

ps -ef | grep mysql
cat /proc/1023/limits | grep open
Max open files  65536 65536 files   

または、MySqlでそれを見ると:

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+

ログから(/var/log/mysql/error.log):

2016-07-25T05:44:35.453668Z 0 [警告] max_open_filesの数を65536を超える数に増やすことができませんでした(リクエスト:1024000)

私はここで完全にアイデアを失っています。最初は1024のopen_files_limitから始めましたが、上記のいずれかで変更されているはずですが、もっと高くする必要があります。パーティションが多いデータベースやテーブルがたくさんあるので、すでにこの制限に達しています。

私は1024000よりも攻撃性の低い数字を試してみましたが、運がありませんでした。

そこに何かアイデアはありますか?

16
J Pierret

これはUbuntu Xenial 16.04で私にとってはうまくいきました:

ディレクトリを作成します/etc/systemd/system/mysql.service.d

/etc/systemd/system/mysql.service.d/override.conf

[Service]
LimitNOFILE=1024000

今すぐ実行

systemctl daemon-reload
systemctl restart mysql.service

はい、確かにLimitNOFILE=infinityは実際には65536に設定しているようです。

MySQLの起動後、次のようにして上記を検証できます。

cat /proc/$(pgrep mysql)/limits | grep files