Ubuntu

由於 InnoDB 表很多,MySQL 無法啟動?

  • November 11, 2011

我在 15 個數據庫中有大約 6000 個 InnoDB 表,並且使用 innodb_file_per_table,我發現每次重新啟動 Ubuntu 伺服器時,MySQL 都無法啟動,並出現錯誤。

Version: '5.1.56-rel12.7-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Percona Server (GPL), 12.7, Revision 224)
111106  5:09:00  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./db1/tbl182.ibd
InnoDB: File operation call: 'open'.

由於有問題的表(即 tbl182.ibd)的文件名每次都不相同,所以我懷疑是由於 MySQL 正在對所有表做一些事情嗎?

但是,當我使用命令(sudo /etc/init.d/mysql restart)重新啟動時,MySQL 可以成功啟動。這很奇怪!

我的環境:MySQL 版本:5.1.56-rel12.7-log(Ubuntu 10.04 LTS + Percona)

更新

通過刪除大量表解決了問題,因此它應該與文件限制有關,而不是權限。

我已經將 /etc/init.d/mysql 更改為硬編碼值ulimit -n 50000,當我創建大量表時仍然無濟於事。

問題不在於文件句柄的限制。那將是錯誤 24,而不是 13。問題是它所說的:權限。我已經看過幾十次了,即使人們認為一切都設置正確並具有正確的權限,但每次都是權限,而且總是有人發現他們錯過了什麼:)你要麼權限設置錯誤或者您有以下內容:

  • 在更高級別的目錄上設置了一個奇怪的權限,例如 / 被限制。(這有時很重要。)
  • 您有另一個程序,例如 mysqld 的兩個實例,正在執行並干擾特權。
  • SELinux 或 AppArmor 正在干擾。

您通過刪除大量表“解決”了這個問題——我認為這不是一個真正的解決方案。您可能剛剛刪除了一些設置了錯誤權限的表 :)

引用自:https://serverfault.com/questions/328203