MySQL max_open_files более 1024


11

При запуске MariaDB я получил [Warning] Не удалось увеличить количество 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

Я перезагрузил компьютер после того, как я изменил пределы. Глядя на вывод ulimit, мои изменения не сработали: $ ulimit unlimited $ ulimit -Sa | grep "открыть файлы" открыть файлы (-n) 1024 $ ulimit -Ha | grep "open files" open files (-n) 4096. Что может быть не так?
user977828

Ответы:


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
По крайней мере, для Mariadb 5.5 в RHEL 7 комментарии в этом файле (/usr/lib/systemd/system/mariadb.service) предупреждают не о том, чтобы редактировать сам этот файл, а о создании каталога service.d, содержащего файл например: /etc/systemd/system/mariadb.service.d/foo.conf. ОБЯЗАТЕЛЬНО ДОБАВЬТЕ «[Service]» вверху этого файла, перед этими двумя лимитами. Он также рекомендует "systemctl --system daemon-reload" после любого изменения. Эти детали сводили меня с ума в течение дополнительного часа выдергивания волос!
IcarusNM

Это не работает в Ubuntu 14.04 с MySQL 5.7. Сервисные файлы не существуют, а пакет systemctl не установлен.
Ты.

Проверить /etc/systemd/system/mysql.service.d/limits.confили /etc/systemd/system/mariadb.service.d/limits.conf у меня
Лука

2

Другая причина в том, что:
Вы должны обратить внимание на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

Необходимо перезагрузить вашу ОС. Хотя я думаю, что это должно быть написано в официальном руководстве ...


1
Мне не нужно было перезагружаться на Fedora 28. Он только попросил меня запустить systemctl daemon-reloadпри перезапуске MariaDB.
DanMan

0

У меня была та же проблема с Ubuntu 15.10 и mysql, и я исправил ее с помощью предыдущего ответа с некоторыми незначительными отличиями.

Я сначала изменился, /etc/security/limits.confкак указано выше.

Я добавил (больше ничего)

LimitNOFILE=infinity

до /lib/systemd/system/mysql.service(небольшая разница в местоположении)

а потом сделал

systemctl daemon-reload
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.