Skip to content

Cambio de directorio para MySQL y AppArmor

Ayer me llevé una desagradable sorpresa en una actualización de Ubuntu Server, MySQL no arrancaba.

El error que vi en el syslog justo después de actualizar fue este:

1
2
apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/mysqld" name="/srv/mysql/mysql-bin.index" pid=3333 comm="mysqld" requested_mask="rwc" denied_mask="rwc" fsuid=106 ouid=106</pre>
apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/srv/mysql/w3.lower-test" pid=3361 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0

Suelo colocar los ficheros (las bases de datos) de MySQL en una carpeta distinta a /var/lib/mysql ya que creo una partición solo para MySQL (así puedo asignar parámetros diferentes para esa partición).

Con este “bloqueo” por parte de AppArmor MySQL no podía arrancar. El problema estaba en que se actualizaron los perfiles para MySQL en AppArmor de una forma más restrictiva, lo cual es bueno porque da mayor seguridad, en caso de ataque no se podrá utilizar MySQL para acceder a otros ficheros del sistema salvo los de la propia base de datos.

Esta directiva está definida en /etc/apparmor.d/usr.sbin.mysqld  pero NO SE DEBE MODIFICAR ESTE FICHERO. Si se modifica, en la próxima actualización el problema volverá.

Cualquier añadido se debe realizar en /etc/apparmor.d/local/usr.sbin.mysqld ya que está pensando para directivas locales y que no se tocarán con las actualizaciones.

En mi caso, he añadido estas directivas para que todo volviera a funcionar:

1
2
3
4
# File /etc/apparmor.d/local/usr.sbin.mysqld
# For MySQL on custom datadir
/srv/mysql/ r,
/srv/mysql/** rwk,

( El fichero donde se define la carpeta que debe utilizar MySQL está en /etc/mysql/my.cnf con la variable datadir )

Luego reiniciamos AppArmor y arrancamos MySQL.

1
2
service apparmor restart
service mysql start

Leave a Reply

Your email address will not be published.