Ubuntu

mysql init-file 配置選項給出文件未找到錯誤

  • November 12, 2011

我想在 mysql 啟動時執行一個 SQL 腳本,但我無法讓它在 Ubuntu 11.10 中執行。

我在 mysql 配置文件中添加了一個“ init-file ”選項:

> sudo emacs -nw /etc/mysql/my.cnf
...
[mysqld]
init-file=/etc/mysql/mysqlinit.sql
...

但是當我重新啟動 mysql 時,它會失敗並出現“未找到文件”錯誤:

> tail /var/log/mysql/error.log
111111  7:41:06 [ERROR] /usr/sbin/mysqld: File '/etc/mysql/mysqlinit.sql' not found (Errcode: 13)
111111  7:41:06 [ERROR] Aborting

但是該文件肯定存在並且是可讀的:

> ls -l /etc/mysql/mysqlinit.sql
-rwxr-xr-x 1 mysql mysql 30 2011-11-09 05:06 /etc/mysql/mysqlinit.sql

任何想法如何解決這個問題?這是 Ubuntu 的怪事還是我做了一些愚蠢的事情?


資訊:

我正在執行 Ubuntu 11.10 和 MySQL 5.1。

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))

謝謝@quanta,問題確實很嚴重。

要解決此問題:

編輯 mysql apparmor 文件:

sudo emacs -nw /etc/apparmor.d/usr.sbin.mysqld

使用 *.sql 副檔名包含您的 init 文件所在的文件夾:

...
/usr/sbin/mysqld {
   /var/log/mysql.log rw,
   /var/log/mysql.err rw,
   ;/var/lib/mysql/ r,
   /var/lib/mysql/** rwk,
   /var/log/mysql/ r,
   /var/log/mysql/* rw,
   /{,var/}run/mysqld/mysqld.pid w,
   /{,var/}run/mysqld/mysqld.sock w,

   /sys/devices/system/cpu/ r,

   # I added to allow my init-file script to run
   /etc/mysql/*.sql r,
}

然後讓 AppArmor 重新載入配置文件。

# sudo /etc/init.d/apparmor reload

然後重新載入mysql:

sudo /etc/init.d/mysql restart

現在初始化文件被執行。耶!

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