web-dev-qa-db-fra.com

MariaDB ne peut pas démarrer après la mise à jour: [Avertissement] Impossible de créer le fichier de test /home/mysql/beta.lower-test

Je viens de mettre à jour MariaDB en utilisant apt-get dist-upgrade. Maintenant, il ne commencera plus à utiliser le service mysql start .

Je peux cependant l'exécuter en tant que root ou faire: Sudo -u mysql mysqld_safe puis MariaDB démarre correctement. Le dossier/home/mysql appartient à l'utilisateur et au groupe mysql.

J'ai trouvé l'erreur à lancer dans cette fonction: https://github.com/MariaDB/server/blob/7ff44b1a832b005264994cbdfc52f93f69b92cdc/sql/mysqld.cc#L9865

Je ne sais pas quoi faire ensuite. Des pointeurs?

14
Bento

Pour exécuter MariaDB SQL depuis/home, dans le fichier /usr/lib/systemd/system/mariadb.service, changez simplement:

ProtectHome=true

à :

ProtectHome=false
39
Thomas

Sur debian 9, vous devez remplacer ProtectHome par false dans les deux /lib/systemd/system/mariadb.serviceet/lib/systemd/system/[email protected] puis exécutez Sudo systemctl daemon-reload.

Peut-être aussi exécuter Sudo grep -Ri "protecthome" /lib/systemd/system pour trouver d'autres instances de ProtectHome dans des fichiers liés à mysql si cela ne fonctionne toujours pas

5
Neo

Même situation après la mise à jour sur Debian 8 (Jessie) et 9 (Stretch). Après "apt-get upgrade" la commande

  • service mysql start

le serveur ne démarre pas et enregistre l'erreur:

[Avertissement] Impossible de créer le fichier de test /home/johndoe/UserDatabases/mypcname.lower-test

la solution est de changer dans le fichier / lib/systemd/system/mariadb.service la valeur:

ProtectHome=true

à

ProtectHome=false

comme décrit ci-dessus.

4
karel

La réponse de Thomas est correcte, mais est réinitialisée par des mises à jour tous les quelques mois. Voici donc une solution permanente:

Utilisation systemctl edit mariadb pour créer un fichier écrasant les paramètres par défaut du service mariadb. (Dans Debian, il est situé dans /etc/systemd/system/mariadb.service.d/override.conf)

Définissez le même paramètre que Thomas a modifié dans le fichier:

[Service]
ProtectHome=false

Utilisation systemctl daemon-reload pour recharger la configuration systemctl.

3
zuim

@RedGiant oui, je l'ai résolu. J'ai oublié de poster ici.

Apparemment, après la version .1, vous ne pouvez plus exécuter SQL depuis/home. Il y a probablement un moyen de contourner cela, mais je ne l'ai pas trouvé.

Je peux exécuter MySQL à partir de n'importe quel endroit sauf/home. Ce que j'ai fait était de démonter/home (j'avais mon RAID SSD monté sur/home) et de remonter mon disque en tant que/ssd. J'ai changé mes chemins dans la config et cela a fonctionné tout de suite.

Je n'ai pas exécuté SELinux ou Apparmor.

3
Bento

La solution de contournement pour cela consiste à monter le répertoire dans home sous/var/lib/mysql:

mount --bind /home/mysql/var/lib/mysql /var/lib/mysql
2
Peter Grond