3 votes

Le serveur MySQL ne démarre pas après avoir déplacé le répertoire des données

Je essaie de déplacer le répertoire de données de MySQL vers un disque externe sur un odroid (mini-ordinateur de type framboise pi).

Je utilise Ubuntu 14.04.

J'ai changé les chemins dans tous les fichiers de configuration contenant /var/lib/mysql et déplacé tous les dossiers mysql sur mon nouveau disque.

Le service ne démarre plus et je ne sais pas comment résoudre ce problème.

Voici tous les chemins modifiés :

root@odroid-server:/etc# grep -rnw '/etc' -e "/var/lib/mysql"
root@odroid-server:/etc# grep -rnw '/etc' -e "/media/md0/mysql"
/etc/apparmor.d/abstractions/mysql:12:   /media/md0/mysql{,d}/mysql{,d}.sock rw,
/etc/apparmor.d/tunables/alias:16:# alias /media/md0/mysql/ -> /home/mysql/,
/etc/apparmor.d/usr.sbin.mysqld:49:  /media/md0/mysql/ r,
/etc/apparmor.d/usr.sbin.mysqld:50:  /media/md0/mysql/** rwk,
/etc/apparmor.d/usr.sbin.mysqld:53:  /media/md0/mysql-files/ r,
/etc/apparmor.d/usr.sbin.mysqld:54:  /media/md0/mysql-files/** rwk,
/etc/apparmor.d/usr.sbin.mysqld:57:  /media/md0/mysql-keyring/ r,
/etc/apparmor.d/usr.sbin.mysqld:58:  /media/md0/mysql-keyring/** rwk,
/etc/imscp/imscp.conf:37:DATABASE_DIR = /media/md0/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:36:datadir           = /media/md0/mysql
/etc/mysql/mysql.conf.d/mysqld.cnf:92:# InnoDB est activé par défaut avec un fichier de données de 10 Mo dans /media/md0/mysql/.
/etc/mysql/mysql.conf.d/mysqld.cnf:98:# chroot = /media/md0/mysql/

Ensuite, pour démarrer le service :

root@odroid-server:/etc# service mysql start
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

J'ai essayé cette commande pour plus de détails et je peux voir qu'elle utilise toujours l'ancien datadir mysql.

root@odroid-server:/etc# journalctl -xe
Nov 18 13:06:45 odroid-server systemd[1]: Starting MySQL Community Server...
-- Subject: Unit mysql.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- L'unité mysql.service a commencé à démarrer.
Nov 18 13:06:45 odroid-server mysql-systemd-start[24276]: Le répertoire de données MySQL n'a pas été trouvé à /var/lib/mysql. Merci d'en créer un.
Nov 18 13:06:45 odroid-server systemd[1]: mysql.service: Processus de contrôle a quitté, code=exited status=1
Nov 18 13:06:45 odroid-server systemd[1]: Échec de démarrage de MySQL Community Server.
-- Subject: L'unité mysql.service a échoué
-- Défini par : systemd
-- Support : http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- L'unité mysql.service a échoué.
--
-- Le résultat est un échec.
Nov 18 13:06:45 odroid-server systemd[1]: mysql.service: Unité a atteint l'état échoué.
Nov 18 13:06:45 odroid-server systemd[1]: mysql.service: Échec avec le résultat 'exit-code'.
Nov 18 13:06:45 odroid-server systemd[1]: mysql.service: Délai d'attente pour le redémarrage du service écoulé.
Nov 18 13:06:45 odroid-server systemd[1]: MySQL Community Server arrêté.
-- Subject : L'unité mysql.service a terminé son arrêt
-- Défini par : systemd
-- Support : http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- L'unité mysql.service a terminé son arrêt.
Nov 18 13:06:45 odroid-server systemd[1]: mysql.service: La demande de démarrage est trop fréquente.
Nov 18 13:06:45 odroid-server systemd[1]: Échec de démarrage de MySQL Community Server.
-- Subject: L'unité mysql.service a échoué
-- Défini par : systemd
-- Support : http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- L'unité mysql.service a échoué.
--
-- Le résultat est un échec.

Peut-être qu'il y a une commande pour recharger les fichiers de configuration de nouveau en RAM ?

0 votes

Insérez la ligne suivante dans votre fichier /etc/my.cfg. log-error=/var/log/mysqld.log Le répertoire de données est-il possédé par l'utilisateur mysql ?

2 votes

Créez un lien symbolique /var/lib/mysql vers le nouveau répertoire

0 votes

Il suffit de faire ce que @IporSircer a dit. Faire des liens symboliques au lieu de modifier les fichiers de configuration évitera ce genre de problèmes + pas besoin de changer de configuration + pas besoin d'écrire beaucoup de documentation supplémentaire :D

3voto

JonathanDavidArndt Points 1414

Des commentaires:

Il suffit de faire un lien symbolique /var/lib/mysql vers le nouveau répertoire.

Créer des liens symboliques est un moyen rapide et facile de déplacer des fichiers et des répertoires importants. Pas besoin de changer de configuration, et il y a peu de documentation à suivre.

2voto

feedc0de Points 259

J'ai trouvé une solution pour cela (des années après que cela m'est arrivé).

Le problème était simplement que le serveur ubuntu est livré avec le malware apparmor. Je m'en suis rendu compte seulement après avoir inspecté dmesg. Pour m'en débarrasser, j'ai simplement exécuté

sudo apt remove --purge apparmor -y

et cela a permis à mysql de démarrer avec mon nouveau datadir mysql (et a également résolu d'autres problèmes).

0voto

Arifur Rahman Points 31

SELINUX pourrait également être la cause de vos soucis. Consultez mon article de blog pour plus de détails sur la façon de résoudre : https://sysengineers.wordpress.com/2021/03/22/mysqld-fails-to-start-after-moving-its-data-directory/

ps. Notez que apparmor et SELinux améliorent la sécurité globale de votre environnement Linux. Les supprimer pourrait résoudre le problème actuel mais laisserait votre installation plus vulnérable.

0 votes

Dans mon expérience, les profils AppArmor incluent souvent l'emplacement de données standard. En d'autres termes, si vous déplacez l'emplacement des données via my.conf, AppArmor empêchera MySQL d'écrire dans le nouvel emplacement.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X