Ubuntu
mysql init-file 配置選項給出文件未找到錯誤
我想在 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
現在初始化文件被執行。耶!