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

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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.