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

Після перезавантаження комп’ютера я змінив ліміти. Дивлячись на вихід ulimit, мої зміни не спрацювали: $ ulimit unlimited $ ulimit -Sa | grep "відкрити файли" відкрити файли (-n) 1024 $ ulimit -Ha | grep "відкрити файли" відкрити файли (-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
Зауважте, що принаймні у системній версії 209 нескінченність означає 65535. Якщо ви хочете більше, просто випустіть число, а не нескінченність.
sivann

3
Щонайменше для Mariadb 5.5 в RHEL 7 коментарі у цьому файлі (/usr/lib/systemd/system/mariadb.service) попереджають вас не редагувати сам цей файл, а створити каталог service.d, що містить файл як-от: /etc/systemd/system/mariadb.service.d/foo.conf. ОБОВ'ЯЗКОВО ДОБАВИТИ "[Service]" у верхній частині цього файлу, перед цими двома рядками Limit. Він також радить "systemctl - перенавантаження системи демон" після будь-яких змін. Ці деталі підштовхували мене до додаткової години витягування волосся!
ІкарNM

Це не працює в 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.