
烏班圖:12.04 LTS(Linux mysql02 3.2.0-40-generic #64-Ubuntu SMP 3 月 25 日星期一 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
MySQL:Ubuntu 發行版 5.5.31
裝備:已刪除!
伺服器已經穩定運作一年多了。然後這個週一 MySQL 開始出現故障。更新導致了該問題,但我們無法確定問題所在。我們甚至嘗試回滾到 MySQL 5.5.30,但沒有成功。我們於 31 年 5 月 5 日返回。
MySQL 錯誤日誌條目:
130430 7:55:46 [ERROR] Error in accept: Too many open files
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)
看來我們遇到了 ulimit 問題。我們已經完全刪除了APPARMOR。我們增加了/etc/security/limits.conf但仍然沒有運氣:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
並展示限制.conf工作中:
root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files (-n) 49152
root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files (-n) 65536
以下是重要條目我的cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
然而:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
我們完全陷入困境和沮喪。任何幫助將不勝感激。
答案1
作業系統:Ubuntu (Debian) 部署
MySQL 伺服器選項:開啟文件限制
Debian 好像是這樣的暴發戶不使用中定義的參數/etc/security/limits.conf,所以當你透過以下方式啟動 mysql 時服務命令(因此,在 upstart 下),它會覆蓋這些定義的限制並使用預設的 1024。
解決辦法是修改mysql.conf定義 upstart 服務的文件,它位於/etc/init/mysql.conf並添加以下行前這預先啟動堵塞:
# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000
參考:
答案2
在 Ubuntu 15.10 上也有同樣的問題。
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758- 帶來了解決方案:
- 檢查 /lib/systemd/system/mysql.service 或 /lib/systemd/system/mysqld.service 是否存在
(就我而言)如果沒有,請建立 /lib/systemd/system/mysql.service 並將內容複製到此文件https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11並將這兩行添加到文件中的某處
LimitNOFILE=infinity LimitMEMLOCK=infinity
如果一個或兩個檔案都存在,請檢查是否包含這兩行:
LimitNOFILE=infinity LimitMEMLOCK=infinity
- 執行
systemctl daemon-reload
……一切都應該沒問題。
答案3
由於上述方法都沒有為我解決問題(只會導致系統記憶體不足),這是我找到的解決方案:
您/etc/mysql/my.conf
需要增加 MySQL 的內部 open_files_limit。所以暫時將其新增至配置中並重新啟動MySQL。
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
運行給你的操作後開啟的文件太多錯誤,您可以將組態變更回預設值並重新啟動MySQL。
答案4
感謝您提供解決方法。但對我來說,這個問題被另外兩個事實所掩蓋。
- 我的資料目錄與預設安裝不同。由於歷史和技術方面的多種原因。
- 我是從一個非常舊的安裝升級的,它經歷了許多後向和前向端口。新安裝的 MySQL 5.5 首次啟動時,InnoDB 引擎未啟動(設定檔中停用了內部實現,但 5.5 中不存在先前版本中可用的插件),並且在未實際升級的情況下創建了升級標記任何桌子。
修復InnoDB問題後,仍吐槽
mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)
我必須在根控制台中啟動 mysqld 並手動重新啟動
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force
然後伺服器開始顯示資料庫,但無法存取某些表。您透過增加限制的解決方法解決了其餘問題,謝謝!