MySQL max_open_files mais de 1024

11

Ao iniciar o MariaDB, recebi [Warning] Não foi possível aumentar o número de max_open_files para mais de 1024 (solicitação: 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)

Tentei sem sucesso corrigir o problema com max_open_files dentro deste arquivo:

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

Até reiniciei o computador novamente, mas tive o mesmo problema.

O /etc/mysql/my.cnf fica assim:

[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

Como é possível corrigir o problema com max_open_files?

user977828
fonte
Você reiniciou o mySql desde que os limites foram alterados? Geralmente, essas coisas não se propõem a partir de uma alteração no arquivo; geralmente, o processo precisa ser reiniciado para detectar a alteração. Além disso, você pode verificar os limites usando o comando ulimit. Você reiniciou desde a alteração?
Mdpc
Eu reiniciei o computador depois, mudei os limites. Observando a saída ulimit, minhas alterações não deram certo: $ ulimit unlimited $ ulimit -Sa | grep "arquivos abertos" arquivos abertos (-n) 1024 $ ulimit -Ha | grep "arquivos abertos" arquivos abertos (-n) 4096. O que poderia estar errado?
user977828

Respostas:

17

Edite /etc/security/limits.confe adicione as seguintes linhas

mysql soft nofile 65535
mysql hard nofile 65535

depois reinicie.

Em seguida, edite /usr/lib/systemd/system/mysqld.serviceou /usr/lib/systemd/system/mariadb.serviceadicione

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Em seguida, reinicie o serviço db:

systemctl reload mariadb.service
logger
fonte
1
Observe que pelo menos na versão system9 do sistema 209, infinito significa 65535. Se você quiser mais do que isso, basta emitir o número, não o infinito.
Sivann
3
Para Mariadb 5.5 no RHEL 7, pelo menos, os comentários nesse arquivo (/usr/lib/systemd/system/mariadb.service) avisam para não editar o arquivo, mas criar um diretório service.d que contenha um arquivo como: /etc/systemd/system/mariadb.service.d/foo.conf. Certifique-se de adicionar "[Service]" na parte superior desse arquivo, antes dessas duas linhas de limite. Ele também aconselha "systemctl --system daemon-reload" após qualquer alteração. Esses detalhes me deixaram louco por mais uma hora puxando os cabelos!
IcarusNM
Isso não funciona no Ubuntu 14.04 com MySQL 5.7. Os arquivos de serviço não existem e o pacote systemctl não está instalado.
Ty.
Verifique /etc/systemd/system/mysql.service.d/limits.confou /etc/systemd/system/mariadb.service.d/limits.conf Funcionou para mim na perfeição
Luka
2

Outro motivo é o seguinte:
você deve prestar atenção aotable_open_cach

código mysql no mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

tente com menor table_open_cachvalor

misima
fonte
1

Você pode ver as instruções oficiais no arquivo mariadb.service;

[[email protected] /]# 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

Ele precisa reiniciar o seu sistema operacional. Embora eu ache que isso deveria estar escrito no manual oficial ...

kujiy
fonte
1
Não precisei reiniciar no Fedora 28. Ele só me pediu para executar systemctl daemon-reloadao reiniciar o MariaDB.
DanMan
0

Eu tive o mesmo problema com o Ubuntu 15.10 e o mysql e o corrigi com a resposta anterior com algumas pequenas diferenças.

Eu mudei /etc/security/limits.confcomo acima.

Eu adicionei (nada mais)

LimitNOFILE=infinity

para /lib/systemd/system/mysql.service(pouca diferença de localização)

e depois

systemctl daemon-reload
Meuoi
fonte