opção de configuração do mysql init-file dando erro de arquivo não encontrado

11

Eu quero que um script SQL seja executado sempre que o mysql iniciar, mas não consigo fazê-lo funcionar no Ubuntu 11.10.

Eu adicionei uma opção " init-file " ao arquivo de configuração do mysql:

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

Mas quando eu reinicio o mysql, ele falha com o erro " Arquivo não encontrado ":

> 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

Mas o arquivo certamente existe e é legível:

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

Alguma idéia de como resolver isso? Isso é uma estranheza do Ubuntu ou eu fiz algo idiota?


Informações:

Estou executando o Ubuntu 11.10 e o MySQL 5.1.

> mysqld --version
mysqld  Ver 5.1.58-1ubuntu1 for debian-linux-gnu on x86_64 ((Ubuntu))
Tom
fonte
Qual é a saída de file /etc/mysql/mysqlinit.sql?
Quanta
file /etc/mysql/mysqlinit.sqldá "/etc/mysql/mysqlinit.sql: texto ASCII, sem terminadores de linha"
Tom
Para diminuir o problema, tente movê-lo para a /tmppasta para ver o que acontece. Você está executando o AppArmor?
quanta
Eu tentei usar um arquivo init, /tmpmas sem sorte. Sim, acho que o Ubuntu usa o AppArmor.
Tom
1
Nesse caso, tente parar o AppArmor e veja se o erro desaparece.
Quanta

Respostas:

14

Obrigado @quanta, o problema era de fato aparmor.

Para corrigir o problema:

Edite o arquivo do mysql apparmor:

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

Inclua a pasta em que o seu arquivo init vive com a extensão * .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 faça o AppArmor recarregar os perfis.

# sudo /etc/init.d/apparmor reload

Então recarregue o mysql:

sudo /etc/init.d/mysql restart

Agora o arquivo init é executado. Yay!

Tom
fonte