MySQL-Init-Datei-Konfigurationsoption, die den Fehler "Datei nicht gefunden" angibt

11

Ich möchte, dass ein SQL-Skript ausgeführt wird, wenn MySQL gestartet wird, aber ich kann es in Ubuntu 11.10 nicht zum Laufen bringen.

Ich habe der MySQL-Konfigurationsdatei eine Option " init-file " hinzugefügt :

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

Aber wenn ich MySQL neu starte, schlägt dies mit dem Fehler " Datei nicht gefunden " fehl :

> 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

Aber die Datei existiert auf jeden Fall und ist lesbar:

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

Irgendwelche Ideen, wie man das löst? Ist das eine Ubuntu-Kuriosität oder habe ich etwas Dummes getan?


Die Info:

Ich verwende Ubuntu 11.10 und MySQL 5.1.

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))
Tom
quelle
Was ist die Ausgabe von file /etc/mysql/mysqlinit.sql?
Quanten
file /etc/mysql/mysqlinit.sqlgibt "/etc/mysql/mysqlinit.sql: ASCII-Text, ohne Zeilenabschluss"
Tom
Um das Problem einzugrenzen, versuchen Sie einfach, es in einen /tmpOrdner zu verschieben, um zu sehen, was passiert. Führen Sie AppArmor aus?
Quanten
Ich habe versucht, eine Init-Datei zu verwenden, /tmpaber kein Glück. Ja, ich denke Ubuntu verwendet AppArmor.
Tom
1
Versuchen Sie in diesem Fall, AppArmor zu stoppen und festzustellen, ob der Fehler behoben ist.
Quanten

Antworten:

14

Danke @quanta, das Problem war in der Tat apparmor.

So beheben Sie das Problem:

Bearbeiten Sie die MySQL-Apparmor-Datei:

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

Fügen Sie den Ordner, in dem sich Ihre Init-Datei befindet, mit der Erweiterung * .sql ein:

...
/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,
}

Lassen Sie AppArmor dann die Profile neu laden.

# sudo /etc/init.d/apparmor reload

Dann lade mysql neu:

sudo /etc/init.d/mysql restart

Jetzt wird die Init-Datei ausgeführt. Yay!

Tom
quelle