MySQL max_open_files más de 1024

11

Al iniciar MariaDB recibí [Advertencia] No se pudo aumentar el número de max_open_files a más de 1024 (solicitud: 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)

Intenté sin éxito solucionar el problema con max_open_files dentro de este archivo:

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

Incluso reinicié la computadora nuevamente, pero tuve el mismo problema.

El /etc/mysql/my.cnf se ve así:

[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

¿Cómo es posible solucionar el problema con max_open_files?

usuario977828
fuente
¿Has reiniciado mySql desde que cambiaste los límites? Estas cosas generalmente no se propagan simplemente a partir de un cambio de archivo, el proceso generalmente debe reiniciarse para recoger el cambio. También puede verificar los límites con el comando ulimit. ¿Has reiniciado desde el cambio?
mdpc
Reinicié la computadora después, cambié los límites. Mirando el resultado de ulimit, mis cambios no funcionaron: $ ulimit unlimited $ ulimit -Sa | grep "abrir archivos" abrir archivos (-n) 1024 $ ulimit -Ha | grep "abrir archivos" abrir archivos (-n) 4096. ¿Qué podría salir mal?
user977828

Respuestas:

17

Edite /etc/security/limits.confy agregue las siguientes líneas

mysql soft nofile 65535
mysql hard nofile 65535

luego reiniciar.

Luego edita /usr/lib/systemd/system/mysqld.serviceo /usr/lib/systemd/system/mariadb.serviceagrega

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Luego reinicie el servicio db:

systemctl reload mariadb.service
registrador
fuente
1
Tenga en cuenta que al menos en la versión 209 de systemd, infinito significa 65535. Si desea más que eso, simplemente emita el número, no el infinito.
sivann
3
Para Mariadb 5.5 en RHEL 7, al menos, los comentarios en ese archivo (/usr/lib/systemd/system/mariadb.service) le advierten que no edite ese archivo en sí, sino que cree un directorio service.d que contenga un archivo como: /etc/systemd/system/mariadb.service.d/foo.conf. ASEGÚRESE DE AGREGAR "[Servicio]" en la parte superior de ese archivo, antes de esas dos líneas de Límite. También aconseja "systemctl --system daemon-reload" después de cualquier cambio. ¡Estos detalles me volvieron loco por una hora adicional de tirar del cabello!
IcarusNM
Esto no funciona en Ubuntu 14.04 con MySQL 5.7. Los archivos de servicio no existen y el paquete systemctl no está instalado.
Ty
Compruebe /etc/systemd/system/mysql.service.d/limits.confo /etc/systemd/system/mariadb.service.d/limits.conf A mí me funcionó sin problemas
Luka
2

Otra razón es que:
debe prestar atención atable_open_cach

código mysql en mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

intente con un table_open_cachvalor más bajo

misima
fuente
1

Puede ver las instrucciones oficiales en el archivo 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

Necesita reiniciar su sistema operativo. Aunque creo que esto debería estar escrito en el manual oficial ...

kujiy
fuente
1
No necesitaba reiniciar en Fedora 28. Solo me pedía que corriera systemctl daemon-reloadal reiniciar MariaDB.
DanMan
0

Tuve el mismo problema con Ubuntu 15.10 y mysql y lo solucioné con la respuesta anterior con algunas diferencias menores.

Primero cambié /etc/security/limits.confcomo arriba.

Agregué (nada más)

LimitNOFILE=infinity

a /lib/systemd/system/mysql.service(poca diferencia de ubicación)

y luego lo hizo

systemctl daemon-reload
Meuoi
fuente