MySQLが起動するたびにSQLスクリプトを実行したいのですが、Ubuntu 11.10でそれを機能させることができません。
Mysql構成ファイルに " init-file "オプションを追加しました。
> Sudo emacs -nw /etc/mysql/my.cnf
...
[mysqld]
init-file=/etc/mysql/mysqlinit.sql
...
しかし、mysqlを再起動すると、「File not found」エラーで失敗します。
> 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に感謝します。問題は確かにapparmorでした。
問題を修正するには:
Mysql apparmorファイルを編集します。
Sudo emacs -nw /etc/apparmor.d/usr.sbin.mysqld
Init-fileが存在するフォルダーに* .sql拡張子を含めます。
...
/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
これでinit-fileが実行されます。わーい!