ファイルが見つからないというエラーを与えるmysql init-file configオプション


11

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))

の出力はfile /etc/mysql/mysqlinit.sql何ですか?
クォンタ

file /etc/mysql/mysqlinit.sql「/etc/mysql/mysqlinit.sql:ASCIIテキスト、ラインターミネーターなし」
トム

問題を絞り込むには、それを/tmpフォルダーに移動して、何が起こるかを確認してください。AppArmorを実行していますか?
クォンタ

initファイルを試してみました/tmpが、うまくいきませんでした。はい、UbuntuはAppArmorを使用していると思います。
トム

1
その場合は、AppArmorを停止して、エラーが解消されるかどうかを確認してください。
クォンタ

回答:


14

@quantaに感謝します。問題は確かに防具でした。

問題を修正するには:

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ファイルが実行されます。わーい!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.