MySQLのmax_open_filesが1024を超えています


11

MariaDBの起動中に、[警告] max_open_filesの数を1024以上に増やすことができませんでした(リクエスト:4607)

$ sudo systemctl status mysqld
● mysqld.service - MariaDB database server
  Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled)
  Active: activating (start-post) since Tue 2014-08-26 14:12:01 EST; 2s ago
Main PID: 8790 (mysqld);         : 8791 (mysqld-post)
  CGroup: /system.slice/mysqld.service
      ├─8790 /usr/bin/mysqld --pid-file=/run/mysqld/mysqld.pid
      └─control
    ├─8791 /bin/sh /usr/bin/mysqld-post
    └─8841 sleep 1

Aug 26 14:12:01 acpfg mysqld[8790]: 140826 14:12:01 [Warning] Could not increase number of max_open_files to more than 1024 (request: 4607)

このファイル内のmax_open_filesの問題を修正しようとして失敗しました:

$ sudo nano /etc/security/limits.conf 
mysql           hard    nofile          8192
mysql           soft    nofile          1200

コンピュータを再起動しましたが、同じ問題が発生しました。

/etc/mysql/my.cnfは次のようになります。

[mysql]

# CLIENT #
port                           = 3306
socket                         = /home/u/tmp/mysql/mysql.sock

[mysqld]

# GENERAL #
user                           = mysql
default-storage-engine         = InnoDB
socket                         = /home/u/tmp/mysql/mysql.sock
pid-file                       = /home/u/tmp/mysql/mysql.pid

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000
skip-name-resolve
sql-mode                       = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
sysdate-is-now                 = 1
innodb                         = FORCE
innodb-strict-mode             = 1

# DATA STORAGE #
datadir                        = /home/u/tmp/mysql/

# BINARY LOGGING #
log-bin                        = /home/u/tmp/mysql/mysql-bin
expire-logs-days               = 14
sync-binlog                    = 1

# CACHES AND LIMITS #
tmp-table-size                 = 32M
max-heap-table-size            = 32M
query-cache-type               = 0
query-cache-size               = 0
max-connections                = 500
thread-cache-size              = 50
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 2048

# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-log-file-size           = 128M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 2G

# LOGGING #
log-error                      = /home/u/tmp/mysql/mysql-error.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /home/u/tmp/mysql/mysql-slow.log

max_open_filesの問題を解決するにはどうすればよいですか?


制限を変更してからmySqlを再起動しましたか?これらは通常、ファイルの変更を単に反映するだけではなく、通常、変更を反映するためにプロセスを再起動する必要があります。また、ulimitコマンドを使用して制限を確認することもできます。変更後、再起動しましたか?
mdpc 2014

その後、コンピュータを再起動し、制限を変更しました。ulimitの出力を見ると、私の変更はうまくいきませんでした:$ ulimit unlimited $ ulimit -Sa | grep "ファイルを開く"ファイルを開く(-n)1024 $ ulimit -Ha | grep "open files" open files(-n)4096。何が問題になるのでしょうか?
user977828 2014

回答:


17

/etc/security/limits.conf次の行を編集して追加します

mysql soft nofile 65535
mysql hard nofile 65535

その後、再起動します。

次に編集/usr/lib/systemd/system/mysqld.serviceまたは/usr/lib/systemd/system/mariadb.service追加

LimitNOFILE=infinity
LimitMEMLOCK=infinity

次に、dbサービスを再起動します。

systemctl reload mariadb.service

1
少なくともsystemdバージョン209では、無限大は65535を意味することに注意してください。それ以上必要な場合は、無限ではなく、数値を発行してください。
シバン

3
RHEL 7のMariadb 5.5の場合、少なくとも、そのファイル(/usr/lib/systemd/system/mariadb.service)のコメントは、そのファイル自体を編集するのではなく、ファイルを含むservice.dディレクトリを作成するように警告します/etc/systemd/system/mariadb.service.d/foo.confなど。これらの2つのLimit行の前に、必ずファイルの先頭に「[Service]」を追加してください。また、変更後は "systemctl --system daemon-reload"をアドバイスします。これらの詳細により、髪を引っ張るのにさらに1時間かかりました。
IcarusNM

これは、MySQL 5.7を搭載したUbuntu 14.04では機能しません。サービスファイルが存在せず、systemctlパッケージがインストールされていません。
タイ。

チェック/etc/systemd/system/mysql.service.d/limits.confまたは/etc/systemd/system/mariadb.service.d/limits.conf それは完璧に私のために働いた
ルカ'21

2

もう1つの理由は、次の
ことです。table_open_cach

mysqlコード mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

低いtable_open_cach値で試してください


1

mariadb.serviceファイルで公式の指示を確認できます。

[root@mariadb5.5 /]# cat /usr/lib/systemd/system/mariadb.service | grep exam -A 5
# For example, if you want to increase mariadb's open-files-limit to 10000,
# you need to increase systemd's LimitNOFILE setting, so create a file named
# "/etc/systemd/system/mariadb.service.d/limits.conf" containing:
#       [Service]
#       LimitNOFILE=10000

OSを再起動する必要があります。これは公式マニュアルに書いておくべきだと思いますが ......


1
Fedora 28で再起動する必要はありませんでしたsystemctl daemon-reload。MariaDBの再起動時に実行するように求められるだけでした。
DanMan 2018

0

Ubuntu 15.10mysqlでも同じ問題が発生しましたが、いくつかの小さな違いはありますが、前の回答で修正しました。

最初に/etc/security/limits.conf上記のように変更しました。

追加しました(それ以上)

LimitNOFILE=infinity

/lib/systemd/system/mysql.service(わずかな場所の違い)

そしてしました

systemctl daemon-reload
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.