mysql init-file config option donnant erreur de fichier introuvable

11

Je veux qu'un script SQL soit exécuté à chaque démarrage de mysql mais je ne peux pas le faire fonctionner dans Ubuntu 11.10.

J'ai ajouté une option " init-file " au fichier de configuration mysql:

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

Mais lorsque je redémarre mysql, il échoue avec une erreur " Fichier non trouvé ":

> 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

Mais le fichier existe certainement et est lisible:

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

Des idées pour résoudre ceci? Est-ce une bizarrerie Ubuntu ou ai-je fait quelque chose de stupide?


Info:

J'utilise Ubuntu 11.10 et MySQL 5.1.

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))
À M
la source
Quelle est la sortie de file /etc/mysql/mysqlinit.sql?
quanta
file /etc/mysql/mysqlinit.sqldonne "/etc/mysql/mysqlinit.sql: texte ASCII, sans terminaison de ligne"
Tom
Pour limiter le problème, essayez simplement de le déplacer vers un /tmpdossier pour voir ce qui se passe. Utilisez-vous AppArmor?
quanta
J'ai essayé d'utiliser un fichier init /tmpmais pas de chance. Oui, je pense qu'Ubuntu utilise AppArmor.
Tom
1
Si c'est le cas, essayez d'arrêter AppArmor et voyez si l'erreur disparaît.
quanta

Réponses:

14

Merci @quanta, le problème était bien celui de l'apparmeur.

Pour résoudre le problème:

Editez le fichier apparmor mysql:

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

Incluez le dossier dans lequel réside votre fichier init avec l'extension * .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,
}

Faites ensuite recharger les profils par AppArmor.

# sudo /etc/init.d/apparmor reload

Rechargez ensuite mysql:

sudo /etc/init.d/mysql restart

Maintenant, le fichier init est exécuté. Yay!

À M
la source