La opción de configuración del archivo de inicio mysql da error al archivo no encontrado


11

Quiero que se ejecute un script SQL cada vez que mysql se inicia, pero no puedo hacerlo funcionar en Ubuntu 11.10.

Agregué una opción " init-file " al archivo de configuración mysql:

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

Pero cuando reinicio mysql, falla con un error " Archivo no 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

Pero el archivo ciertamente existe y es legible:

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

¿Alguna idea de como resolver esto? ¿Es esto una rareza de Ubuntu o hice algo tonto?


Información:

Estoy ejecutando Ubuntu 11.10 y MySQL 5.1.

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

¿Cuál es la salida de file /etc/mysql/mysqlinit.sql?
cuantos

file /etc/mysql/mysqlinit.sqlda "/etc/mysql/mysqlinit.sql: texto ASCII, sin terminadores de línea"
Tom

Para reducir el problema, solo intente moverlo a la /tmpcarpeta para ver qué sucede. ¿Estás ejecutando AppArmor?
cuantos

Intenté usar un archivo init /tmppero no tuve suerte. Sí, creo que Ubuntu usa AppArmor.
Tom

1
Si es así, intente detener AppArmor y ver si el error desaparece.
quanta

Respuestas:


14

Gracias @quanta, el problema fue realmente aparente.

Para solucionar el problema:

Edite el archivo mysql apparmor:

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

Incluya la carpeta donde vive su archivo init con la extensión * .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,
}

Y luego haga que AppArmor vuelva a cargar los perfiles.

# sudo /etc/init.d/apparmor reload

Luego vuelva a cargar mysql:

sudo /etc/init.d/mysql restart

Ahora se ejecuta el archivo init. ¡Hurra!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.