mysql init-file config opzione che dà errore file non trovato


11

Voglio avere uno script SQL eseguito ogni volta che mysql si avvia ma non riesco a farlo funzionare in Ubuntu 11.10.

Ho aggiunto un'opzione " init-file " al file di configurazione mysql:

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

Ma quando riavvio mysql, non riesce con un errore " File non trovato ":

> 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

Ma il file esiste sicuramente ed è leggibile:

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

Qualche idea su come risolverlo? È una stranezza di Ubuntu o ho fatto qualcosa di stupido?


Informazioni:

Sto eseguendo Ubuntu 11.10 e MySQL 5.1.

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))

Qual è l'output di file /etc/mysql/mysqlinit.sql?
quanta,

file /etc/mysql/mysqlinit.sqldà "/etc/mysql/mysqlinit.sql: testo ASCII, senza terminatori di riga"
Tom

Per restringere il problema, prova a spostarlo nella /tmpcartella per vedere cosa succede. Stai eseguendo AppArmor?
quanta,

Ho provato a usare un file init in /tmpma senza fortuna. Sì, penso che Ubuntu usi AppArmor.
Tom,

1
In tal caso, prova a interrompere AppArmor e verifica se l'errore scompare.
quanti dal

Risposte:


14

Grazie @quanta, il problema era davvero apparmor.

Per risolvere il problema:

Modifica il file mysql apparmor:

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

Includi la cartella in cui risiede il tuo file init con l'estensione * .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,
}

E quindi fare AppArmor ricaricare i profili.

# sudo /etc/init.d/apparmor reload

Quindi ricaricare mysql:

sudo /etc/init.d/mysql restart

Ora il file init viene eseguito. Sìì!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.