MySQL max_open_files hơn 1024


11

Khi bắt đầu MariaDB, tôi đã nhận được [Cảnh báo] Không thể tăng số lượng max_open_files lên hơn 1024 (yêu cầu: 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)

Tôi đã cố gắng không thành công để khắc phục sự cố với max_open_files bên trong tệp này:

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

Tôi thậm chí đã khởi động lại máy tính một lần nữa, nhưng tôi gặp vấn đề tương tự.

Các /etc/mysql/my.cnf trông như thế này:

[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

Làm thế nào có thể khắc phục sự cố với max_open_files?


Bạn đã khởi động lại mySql kể từ khi thay đổi giới hạn chưa? Những điều này thường không chỉ đơn giản là di chuyển từ một thay đổi tập tin, quá trình thường phải được khởi động lại để nhận thay đổi. Ngoài ra, bạn có thể xác minh các giới hạn bằng cách sử dụng lệnh ulimit. Bạn đã khởi động lại từ khi thay đổi?
mdpc

Tôi khởi động lại máy tính sau, tôi thay đổi giới hạn. Nhìn vào sản lượng ulimit, những thay đổi của tôi không có kết quả: $ ulimit không giới hạn $ ulimit -Sa | grep "mở tệp" mở tệp (-n) 1024 $ ulimit -Ha | grep "mở tệp" mở tệp (-n) 4096. Điều gì có thể sai?
user977828

Câu trả lời:


17

Chỉnh sửa /etc/security/limits.confvà thêm các dòng sau

mysql soft nofile 65535
mysql hard nofile 65535

sau đó khởi động lại.

Sau đó chỉnh sửa /usr/lib/systemd/system/mysqld.servicehoặc /usr/lib/systemd/system/mariadb.servicethêm

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Sau đó khởi động lại dịch vụ db:

systemctl reload mariadb.service

1
Xin lưu ý rằng ít nhất trên phiên bản systemd 209, vô cực có nghĩa là 65535. Nếu bạn muốn nhiều hơn thế, chỉ cần phát hành số, không phải vô hạn.
sivann

3
Đối với Mariadb 5.5 trong RHEL 7, ít nhất, các nhận xét trong tệp đó (/usr/lib/systemd/system/mariadb.service) cảnh báo bạn không nên tự chỉnh sửa tệp đó mà thay vào đó hãy tạo thư mục service.d chứa tệp như: /etc/systemd/system/mariadb.service.d/foo.conf. HÃY ĐỂ THÊM "[Dịch vụ]" ở đầu tệp đó, trước hai dòng Giới hạn đó. Nó cũng khuyên "systemctl --system daemon-reload" sau bất kỳ thay đổi nào. Những chi tiết này đã khiến tôi phát điên khi thêm một giờ kéo tóc!
IcarusNM

Điều này không hoạt động trong Ubuntu 14.04 với MySQL 5.7. Các tệp dịch vụ không tồn tại và gói systemctl không được cài đặt.
Ty.

Kiểm tra /etc/systemd/system/mysql.service.d/limits.confhoặc /etc/systemd/system/mariadb.service.d/limits.conf nó hoạt động với tôi hoàn hảo
Luka

2

Một lý do khác là:
Bạn phải chú ý đếntable_open_cach

mã mysql trong mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

thử với table_open_cachgiá trị thấp hơn


1

Bạn có thể xem hướng dẫn chính thức trong tệp 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

Nó cần phải khởi động lại hệ điều hành của bạn. Mặc dù tôi nghĩ rằng điều này nên được viết trong hướng dẫn chính thức ...


1
Tôi không cần phải khởi động lại trên Fedora 28. Nó chỉ yêu cầu tôi chạy systemctl daemon-reloadkhi khởi động lại MariaDB.
DanMan

0

Tôi có vấn đề cùng với Ubuntu 15.10mysql và cố định nó với các câu trả lời trước với một số khác biệt nhỏ.

Đầu tiên tôi đã thay đổi /etc/security/limits.confnhư trên.

Tôi đã thêm (không có gì hơn)

LimitNOFILE=infinity

đến /lib/systemd/system/mysql.service(sự khác biệt nhỏ về vị trí)

và sau đó đã làm

systemctl daemon-reload
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.