MySQL max_open_files mehr als 1024


11

Beim Starten von MariaDB wurde [Warnung] angezeigt. Die Anzahl der max_open_files konnte nicht auf mehr als 1024 erhöht werden (Anfrage: 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)

Ich habe erfolglos versucht, das Problem mit max_open_files in dieser Datei zu beheben:

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

Ich habe den Computer sogar neu gestartet, aber ich habe das gleiche Problem.

Die Datei /etc/mysql/my.cnf sieht folgendermaßen aus:

[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

Wie ist es möglich, das Problem mit max_open_files zu beheben?


Haben Sie mySql neu gestartet, seit sich die Grenzwerte geändert haben? Diese Dinge gehen im Allgemeinen nicht einfach auf eine Dateiänderung zurück, sondern der Prozess muss normalerweise neu gestartet werden, um die Änderung zu übernehmen. Sie können die Grenzwerte auch mit dem Befehl ulimit überprüfen. Haben Sie seit der Änderung einen Neustart durchgeführt?
Mdpc

Ich habe den Computer neu gestartet, nachdem ich die Grenzwerte geändert habe. Mit Blick auf die ulimit-Ausgabe haben meine Änderungen nicht geklappt: $ ulimit unbegrenzt $ ulimit -Sa | grep "Dateien öffnen" Dateien öffnen (-n) 1024 $ ulimit -Ha | grep "open files" open files (-n) 4096. Was könnte falsch werden?
user977828

Antworten:


16

Bearbeiten /etc/security/limits.confund fügen Sie die folgenden Zeilen hinzu

mysql soft nofile 65535
mysql hard nofile 65535

dann neu starten.

Dann bearbeiten /usr/lib/systemd/system/mysqld.serviceoder /usr/lib/systemd/system/mariadb.serviceund hinzufügen

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Starten Sie dann den Datenbankdienst neu:

systemctl reload mariadb.service

1
Bitte beachten Sie, dass zumindest in systemd Version 209 unendlich 65535 bedeutet. Wenn Sie mehr als das wollen, geben Sie einfach die Zahl ein, nicht unendlich.
Sivann

3
Zumindest für Mariadb 5.5 in RHEL 7 warnen Sie die Kommentare in dieser Datei (/usr/lib/systemd/system/mariadb.service), diese Datei nicht selbst zu bearbeiten, sondern ein Verzeichnis service.d zu erstellen, das eine Datei enthält wie: /etc/systemd/system/mariadb.service.d/foo.conf. Stellen Sie sicher, dass Sie "[Service]" am Anfang dieser Datei vor diesen beiden Grenzwertzeilen hinzufügen. Nach jeder Änderung wird außerdem "systemctl --system daemon-reload" empfohlen. Diese Details haben mich für eine zusätzliche Stunde des Haarziehens verrückt gemacht!
IcarusNM

Dies funktioniert in Ubuntu 14.04 mit MySQL 5.7 nicht. Die Servicedateien sind nicht vorhanden und das Systemctl-Paket ist nicht installiert.
Ty.

Check /etc/systemd/system/mysql.service.d/limits.confor /etc/systemd/system/mariadb.service.d/limits.conf Es hat bei mir einwandfrei funktioniert
Luka

2

Ein weiterer Grund ist, dass die:
Sie müssen auf die achtentable_open_cach

MySQL-Code in mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

versuchen Sie es mit einem niedrigeren table_open_cachWert


1

Sie können die offizielle Anweisung in der Datei mariadb.service sehen.

[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

Es muss Ihr Betriebssystem neu starten. Obwohl ich denke, dass dies im offiziellen Handbuch geschrieben werden sollte ...


1
Ich musste Fedora 28 nicht systemctl daemon-reloadneu starten. Ich musste nur beim Neustart von MariaDB ausgeführt werden.
DanMan

0

Ich hatte das gleiche Problem mit Ubuntu 15.10 und MySQL und habe es mit der vorherigen Antwort mit einigen kleinen Unterschieden behoben.

Ich habe mich zuerst /etc/security/limits.confwie oben verändert .

Ich fügte hinzu (nichts mehr)

LimitNOFILE=infinity

zu /lib/systemd/system/mysql.service(kleiner Standortunterschied)

und dann tat

systemctl daemon-reload
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.