MySQL max_open_files 1024 से अधिक है


11

मारियाबडी शुरू करने के दौरान मुझे मिला [चेतावनी] अधिकतम 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

अधिकतम समस्या को कैसे ठीक करना संभव है?


क्या आपने सीमा बदलने के बाद से mySql को पुनः आरंभ किया है? ये चीजें आम तौर पर एक फ़ाइल परिवर्तन से प्रचारित नहीं होती हैं, आमतौर पर परिवर्तन को लेने के लिए प्रक्रिया को फिर से शुरू करना पड़ता है। साथ ही आप ulimit कमांड का उपयोग करके सीमाएं सत्यापित कर सकते हैं। क्या आपने बदलाव के बाद रिबूट किया है?
एमडीपीसी

मैंने कंप्यूटर को फिर से शुरू किया, मैंने सीमाएं बदल दीं। Ulimit आउटपुट को देखते हुए मेरे बदलाव काम नहीं हुए: $ ulimit अनलिमिटेड $ 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। यदि आप इससे अधिक चाहते हैं, तो बस संख्या जारी करें, अनंत नहीं।
सिवनी s

3
आरएचईएल 7 में मरदब 5.5 के लिए, कम से कम, उस फ़ाइल में टिप्पणी (/usr/lib/systemd/system/mariadb.service) आपको चेतावनी देती है कि आप स्वयं उस फ़ाइल को संपादित न करें, बल्कि एक फ़ाइल के साथ एक service.d निर्देशिका बनाने के लिए। जैसे: /etc/systemd/system/mariadb.service.d/foo.conf उन दो सीमा रेखाओं से पहले, उस फ़ाइल के शीर्ष पर ADD "[सेवा]" को भेजें। यह किसी भी बदलाव के बाद "systemctl --system daemon-reload" की भी सलाह देता है। इन विवरणों ने मुझे बाल खींचने के अतिरिक्त घंटे के लिए पागल कर दिया!
इकारसएनएम

यह MySQL 5.7 के साथ Ubuntu 14.04 में काम नहीं करता है। सेवा फ़ाइलें मौजूद नहीं हैं और systemctl पैकेज स्थापित नहीं है।
टाइ।

जाँच करें /etc/systemd/system/mysql.service.d/limits.confया /etc/systemd/system/mariadb.service.d/limits.conf यह मेरे लिए निर्दोष रूप से काम किया
लूका

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
मुझे फेडोरा 28 पर रीबूट करने की आवश्यकता नहीं थी। इसने मुझे केवल systemctl daemon-reloadमारडाबडी को फिर से शुरू करने के लिए चलाने के लिए कहा ।
डैनमैन

0

मेरे पास Ubuntu 15.10 और mysql के साथ एक ही मुद्दा था और इसे कुछ मामूली अंतरों के साथ पिछले उत्तर के साथ तय किया।

मैं पहली बार /etc/security/limits.confऊपर के रूप में बदल गया ।

मैंने जोड़ा (और कुछ नहीं)

LimitNOFILE=infinity

करने के लिए /lib/systemd/system/mysql.service(छोटे स्थान अंतर)

और फिर किया

systemctl daemon-reload
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.