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))
file /etc/mysql/mysqlinit.sql
?file /etc/mysql/mysqlinit.sql
gibt "/etc/mysql/mysqlinit.sql: ASCII-Text, ohne Zeilenabschluss"/tmp
Ordner zu verschieben, um zu sehen, was passiert. Führen Sie AppArmor aus?/tmp
aber kein Glück. Ja, ich denke Ubuntu verwendet AppArmor.Antworten:
Danke @quanta, das Problem war in der Tat apparmor.
So beheben Sie das Problem:
Bearbeiten Sie die MySQL-Apparmor-Datei:
Fügen Sie den Ordner, in dem sich Ihre Init-Datei befindet, mit der Erweiterung * .sql ein:
Lassen Sie AppArmor dann die Profile neu laden.
Dann lade mysql neu:
Jetzt wird die Init-Datei ausgeführt. Yay!
quelle