MySQL max_open_files 1024'ten fazla


11

MariaDB başlatılırken [Uyarı] max_open_files sayısı 1024'ten fazla olamaz (istek: 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)

Bu dosyanın içindeki max_open_files ile sorunu düzeltmek için başarısız çalıştı:

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

Bilgisayarı yeniden başlattım, ama aynı problemi yaşadım.

/Etc/mysql/my.cnf şöyle görünür:

[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 ile sorunu nasıl çözebilirim?


Sınırları değiştirdikten sonra mySql'i yeniden başlattınız mı? Bunlar genellikle bir dosya değişikliğinden kaynaklanmıyor, değişikliğin alınması için sürecin genellikle yeniden başlatılması gerekiyor. Ayrıca ulimit komutunu kullanarak sınırları doğrulayabilirsiniz. Değişiklikten bu yana yeniden başlattınız mı?
mdpc

Sonra bilgisayarı yeniden başlattım, sınırları değiştirdim. Ulimit çıktısına baktığımda değişikliklerim işe yaramadı: $ ulimit unlimited $ ulimit -Sa | grep "açık dosyalar" açık dosyalar (-n) 1024 $ ulimit -Ha | grep "open files" açık dosyalar (-n) 4096. Sorun ne olabilir?
user977828

Yanıtlar:


17

Düzen /etc/security/limits.confve aşağıdaki satırları ekleyin

mysql soft nofile 65535
mysql hard nofile 65535

sonra yeniden başlatın.

Sonra düzenleyin /usr/lib/systemd/system/mysqld.serviceveya /usr/lib/systemd/system/mariadb.serviceekleyin

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Sonra db hizmetini yeniden başlatın:

systemctl reload mariadb.service

1
En azından sistemd 209 sürümünde, sonsuzluğun 65535 anlamına geldiğini lütfen unutmayın. Bundan daha fazlasını istiyorsanız, sonsuzluğu değil, sadece sayıyı verin.
sivann

3
RHEL 7'deki Mariadb 5.5 için, en azından, bu dosyadaki yorumlar (/usr/lib/systemd/system/mariadb.service) bu dosyayı düzenlememeniz yerine dosya içeren bir service.d dizini oluşturmanız için sizi uyarır gibi: /etc/systemd/system/mariadb.service.d/foo.conf. Bu iki Limit satırından önce, dosyanın üst kısmına "[Hizmet]" EKLEMEDİĞİNİZDEN EMİN OLUN. Ayrıca herhangi bir değişiklikten sonra "systemctl --sistem daemon-reload" komutunu verir. Bu detaylar bana bir saat daha saç çekmem için beni deli etti!
IcarusNM

Bu MySQL 5.7 ile Ubuntu 14.04'te çalışmaz. Hizmet dosyaları mevcut değil ve systemctl paketi yüklü değil.
Ty.

Check /etc/systemd/system/mysql.service.d/limits.confor /etc/systemd/system/mariadb.service.d/limits.conf It benim için kusursuz çalıştı
Luka

2

Bir başka nedeni şudur:
Sen dikkat etmeleri gerekmektedirtable_open_cach

mysql kodu mysqld.cc

wanted_files= 10 + max_connections + table_cache_size * 2;

daha düşük table_open_cachdeğerle dene


1

Resmi talimatı mariadb.service dosyasında görebilirsiniz;

[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

İşletim sisteminizi yeniden başlatmanız gerekir. Bunun resmi el kitabında yazılması gerektiğini düşünüyorum ...


1
Fedora 28'de yeniden başlatmam gerekmiyordu. Sadece systemctl daemon-reloadMariaDB'yi yeniden başlatırken koşmamı istedi .
DanMan

0

Ben Ubuntu 15.10 ve mysql ile aynı sorunu vardı ve bazı küçük farklılıklar ile önceki cevap ile düzeltildi.

İlk /etc/security/limits.confolarak yukarıdaki gibi değiştim .

Ekledim (başka bir şey yok)

LimitNOFILE=infinity

- /lib/systemd/system/mysql.service(küçük konum farkı)

ve sonra yaptı

systemctl daemon-reload
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.