1024보다 큰 MySQL max_open_files


11

MariaDB를 시작하는 동안 [경고] max_open_file 수를 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
RHEL 7의 Mariadb 5.5의 경우, 최소한 해당 파일 (/usr/lib/systemd/system/mariadb.service)의 주석은 해당 파일 자체를 편집하지 말고 파일을 포함하는 service.d 디렉토리를 작성하라는 경고를 표시합니다. /etc/systemd/system/mariadb.service.d/foo.conf와 같습니다. 파일의 맨 위에있는 두 개의 한계 행 앞에 "[서비스]"를 추가해야합니다. 또한 변경 후 "systemctl --system daemon-reload"를 권장합니다. 이러한 세부 사항으로 인해 머리카락을 한 시간 더 당기는 데 어려움을 겪었습니다!
IcarusNM

MySQL 5.7의 Ubuntu 14.04에서는 작동하지 않습니다. 서비스 파일이없고 systemctl 패키지가 설치되어 있지 않습니다.
Ty.

점검 /etc/systemd/system/mysql.service.d/limits.conf또는 /etc/systemd/system/mariadb.service.d/limits.conf 그것은 완벽하게 나를 위해 일했다
Luka

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

OS를 재부팅해야합니다. 나는 이것이 공식 매뉴얼에 쓰여 져야한다고 생각하지만 ...


1
Fedora 28에서 재부팅 할 필요가 없었습니다 systemctl daemon-reload. MariaDB를 다시 시작할 때만 실행하도록 요청했습니다 .
DanMan

0

Ubuntu 15.10mysql 에서 동일한 문제가 발생했으며 약간의 차이가 있지만 이전 답변으로 수정했습니다.

먼저 /etc/security/limits.conf위와 같이 변경 했습니다.

나는 더 이상 아무것도 추가하지 않았다

LimitNOFILE=infinity

~ /lib/systemd/system/mysql.service(위치 차이가 거의 없음)

그리고 나서

systemctl daemon-reload
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.