опція config mysql init-file, що надає файлу помилку


11

Я хочу, щоб сценарій SQL запускався кожного разу, коли запускається mysql, але я не можу змусити його працювати в Ubuntu 11.10.

Я додав параметр " init-file " до файлу конфігурації mysql:

> 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, проблема справді була прикрі.

Щоб вирішити проблему:

Редагуйте файл програми myql:

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

Включіть папку, де живе ваш init-файл із розширенням * .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-файл виконується. Так!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.