MySQL max_open_files lebih dari 1024

11

Saat memulai MariaDB saya mendapat [Peringatan] Tidak dapat meningkatkan jumlah max_open_files hingga lebih dari 1024 (permintaan: 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)

Saya mencoba gagal untuk memperbaiki masalah dengan max_open_files di dalam file ini:

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

Saya bahkan me-restart komputer lagi, tetapi saya mendapat masalah yang sama.

/Etc/mysql/my.cnf terlihat seperti ini:

[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

Bagaimana mungkin memperbaiki masalah dengan max_open_files?

pengguna977828
sumber
Sudahkah Anda me-restart mySql sejak membuat batas berubah? Hal-hal ini umumnya tidak hanya mendorong dari perubahan file, proses biasanya harus direstart untuk mengambil perubahan. Anda juga dapat memverifikasi batas menggunakan perintah ulimit. Sudahkah Anda reboot sejak perubahan?
mdpc
Saya me-restart komputer setelah itu, saya mengubah batasnya. Melihat output ulimit perubahan saya tidak berhasil: $ ulimit unlimited $ ulimit -Sa | grep "buka file" buka file (-n) 1024 $ ulimit -Ha | grep "buka file" buka file (-n) 4096. Apa yang bisa salah?
user977828

Jawaban:

17

Edit /etc/security/limits.confdan tambahkan baris berikut

mysql soft nofile 65535
mysql hard nofile 65535

lalu reboot.

Kemudian edit /usr/lib/systemd/system/mysqld.serviceatau /usr/lib/systemd/system/mariadb.servicedan tambahkan

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Kemudian restart layanan db:

systemctl reload mariadb.service
penebang
sumber
1
Harap dicatat bahwa setidaknya pada systemd versi 209, infinity berarti 65535. Jika Anda menginginkan lebih dari itu, cukup terbitkan nomornya, bukan infinity.
sivann
3
Untuk Mariadb 5.5 di RHEL 7, setidaknya, komentar dalam file itu (/usr/lib/systemd/system/mariadb.service) memperingatkan Anda untuk tidak mengedit file itu sendiri, melainkan membuat direktori service.d yang berisi file seperti: /etc/systemd/system/mariadb.service.d/foo.conf. JADILAH TAMBAHKAN TAMBAH "[Layanan]" di bagian atas file itu, sebelum kedua garis Batas itu. Itu juga menyarankan "systemctl --system daemon-reload" setelah perubahan apa pun. Detail-detail ini membuatku gila selama satu jam tambahan mencabut rambut!
IcarusNM
Ini tidak berfungsi di Ubuntu 14.04 dengan MySQL 5.7. File layanan tidak ada dan paket systemctl tidak diinstal.
Ty.
Periksa /etc/systemd/system/mysql.service.d/limits.confatau /etc/systemd/system/mariadb.service.d/limits.conf Berhasil bagi saya dengan sempurna
Luka
2

Alasan lain adalah bahwa:
Anda harus memperhatikantable_open_cach

kode mysql di mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

coba dengan table_open_cachnilai yang lebih rendah

misima
sumber
1

Anda dapat melihat instruksi resmi di file 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

Perlu me-reboot OS Anda. Meskipun saya pikir ini harus ditulis dalam manual resmi ...

Kujiy
sumber
1
Saya tidak perlu memulai ulang pada Fedora 28. Ia hanya meminta saya untuk menjalankan systemctl daemon-reloadketika memulai kembali MariaDB.
DanMan
0

Saya memiliki masalah yang sama dengan Ubuntu 15.10 dan mysql dan memperbaikinya dengan jawaban sebelumnya dengan beberapa perbedaan kecil.

Saya pertama kali berubah /etc/security/limits.confseperti di atas.

Saya menambahkan (tidak lebih)

LimitNOFILE=infinity

ke /lib/systemd/system/mysql.service(sedikit perbedaan lokasi)

dan kemudian melakukannya

systemctl daemon-reload
Meuoi
sumber