Ou comment une « simple » mise à jour empêche MySql de redémarrer.

Lors d’une mise à jour de Ubuntu le fichier contenant la socket de connexion passe du répertoire /var/run/mysqld/ à /run/mysqld/. Et la configuration MySQL de AppArmor n’a pas été mise à jour.

Si vous êtes dans ce cas là dmesg doit baver des trucs du genre:

[5015949.897712] type=1400 audit(1343493499.381:2486195): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=30272 comm="apparmor_parser"
[5015951.955304] type=1400 audit(1343493501.437:2486196): apparmor="DENIED" operation="mknod" parent=1 profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock" pid=30276 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=104 ouid=104
[5015952.569459] init: mysql main process (30276) terminated with status 1
[5015952.569681] init: mysql main process ended, respawning
[5015953.370787] init: mysql post-start process (30277) terminated with status 1

La solution: éditer le fichier /etc/apparmor.d/usr.sbin.mysqld.
Remplacer les lignes

/var/run/mysqld/mysqld.pid rw,
/var/run/mysqld/mysqld.sock rw,

par

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,