ubuntuusers.de

MariaDB startet nicht nach Verschiebung des DB-Verzeichnisses ins Home-Verzeichnis

Status: Gelöst | Ubuntu-Version: Kubuntu 18.04 (Bionic Beaver)
Antworten |

FFab

Anmeldungsdatum:
27. Februar 2009

Beiträge: 26

MariaDB ist als Einzelsystem unter18.04 installiert. Nach Einrichten der DB habe ich das DB-Verzeichnis geändert – neue Ablage ist das Home-Verzeichnis. Die Änderung des Verzeichnisses erfolgte wie in https://wiki.ubuntuusers.de/MariaDB/#ndern-des-Datenbank-Verzeichnisses beschrieben. Jetzt lässt sich MariaDB nicht mehr starten.

Fehlermeldung

systemctl status mariadb :

● mariadb.service - MariaDB 10.1.44 database server 
  Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) 
Active: failed (Result: exit-code) since Fri 2020-02-14 13:53:46 CET; 3min 8s ago 
Docs: man:mysqld(8) 
https://mariadb.com/kb/en/library/systemd/ 
Process: 1230 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) 
Process: 1208 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS) 
Process: 3072 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)                                                                      Process: 2997 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SU 
 Process: 2993 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS) 
Process: 2990 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Main PID: 3072 (code=exited, status=1/FAILURE) 
Status: "MariaDB server is down" 

Feb 14 13:53:45 hape systemd[1]: Starting MariaDB 10.1.44 database server... 
Feb 14 13:53:46 hape mysqld[3072]: 2020-02-14 13:53:46 139802261896320 [Note] /usr/sbin/mysqld (mysqld 10.1.44-MariaDB-0ubuntu0.18.04.1) starting as process 3072 ... 
Feb 14 13:53:46 hape mysqld[3072]: 2020-02-14 13:53:46 139802261896320 [Warning] Can't create test file /home/k6/mdblager2/mariadb/mysql/hape.lower-test 
Feb 14 13:53:46 hape mysqld[3072]: [108B blob data] 
Feb 14 13:53:46 hape mysqld[3072]: 2020-02-14 13:53:46 139802261896320 [ERROR] Aborting 
Feb 14 13:53:46 hape systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE 
Feb 14 13:53:46 hape systemd[1]: mariadb.service: Failed with result 'exit-code'. 
Feb 14 13:53:46 hape systemd[1]: Failed to start MariaDB 10.1.44 database server.

Eine Verschiebung ins Verzeichnis "/" macht hingegen keine Probleme. Was muss ich ändern, dass MariaDB problemlos läuft, wenn das DB-Verzeichnis sich im Home-Verzeichnis befindet?

Moderiert von ChickenLipsRfun2eat:

Thema in einen passenden Forenbereich verschoben. Bitte beachte die als wichtig markierten Themen („Welche Themen gehören hier her und welche nicht?“) in jedem Forenbereich. Danke.

hakel

Anmeldungsdatum:
13. August 2009

Beiträge: 23336

Du muß die Rechte (Eigentümer, Gruppe) kontrollieren, steht auch so explizit im Wiki.

FFab

(Themenstarter)

Anmeldungsdatum:
27. Februar 2009

Beiträge: 26

Ich bin vorgegangen, wie im Wiki beschrieben. /lib/var/mysql habe ich mit

sudo rsync -av  /lib/var/mysql <Zielverzeichns> 

kopiert, dadurch werden alle Rechte von mysql und alle darunter liegenden Verzeichnissen und Dateien unverändert übernommen. Da hier kein Übergang von Mysql zu MariaDB vorliegt, ist eine Anpassung von /etc/apparmor.d/usr.sbin.mysqld irrelevant.

Die Probleme treten nur auf, wenn das Verzeichnis nach /home oder darunter liegende Verzeichnise verschoben wird. Verschiebungen innerhalb des Systembereichs liefen problemlos.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Denk daran, dass das Verzeichnis <benutzer> in /home/<benutzer> in der Regel auch noch Berechtigungen hat, die im Konflikt mit dem MySQL-MariaDB-Dienstkonto stehen könnten.

FFab

(Themenstarter)

Anmeldungsdatum:
27. Februar 2009

Beiträge: 26

MariaDB startet nicht bei Verschiebungen nach /home/<benutzer> oder nach /home, d.h.ausserhalb des Benutzer-Verzeichnisses. Was kann ich tun, um die von Dir angesprochenen Konflikte zu vermeiden/beseitigen?

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Unter Linux werden die Berechtigungen Ebene für Ebene abgeklappert. Bei einem Pfad wie /home/k6/mdblager2/mariadb/mysql/ prüft das System also zuerst, ob der aktuelle Benutzer (hier das Dienstkonto für MariaDB) auf / zugreifen darf. Ist das in Ordnung, wird geprüft, ob dort das Unterverzeichnis home existiert und der Benutzer auch darauf Zugriffsrechte hat. Das geht dann so weiter für k6, dann mdblager2, über mariadb bis mysql. Fehlen bei einem dieser Verzeichnisse die notwendigen Rechte, stoppt der Mechanismus.

Wenn das Benutzerverzeichnis von k6 die Standardberechtigungen aufweist, dürften das Verzeichnis selbst und ein eventuell (noch) vorhandenes Verzeichnis Public (oder vergleichbar) die einzigen sein, die für andere lesbar sind (siehe Rechte). Und da MariaDB voraussichtlich nicht mit dem Benutzer k6 ausgeführt wird, brauchen wir hier entsprechende Anpassungen.

Du hast mehrere Möglichkeiten, wobei ich erst einmal die erste ausprobieren würde:

  • Setzen von Lese(r)- und Ausführen(x)-Berechtigungen auf den Verzeichnissen zwischen / und mysql für andere Benutzer(o) mit z.B. chmod. Hier bitte aufpassen, dass du Optionen für rekursives Ändern nicht benutzt, weil dein nächster Thread im Forum voraussichtlich mit einem nicht mehr funktionierenden System zu tun haben wird.

  • Du änderst das Benutzerkonto des MariaDB-Dienstes zu k6.

  • Du nimmst das Benutzerkonto des MariaDB-Dienstes in die Gruppe k6 auf.

  • Du machst aus der system-Unit eine user-Unit.

Der Nachteil der ersten Lösung ist ein Verzeichnis im home des Benutzer k6, das ihm nicht gehört und wo er voraussichtlich auch keine Berechtigungen drauf hat. Je nach Art und Weise z.B. deines Backups kann es da dann irgendwann zu Problemen kommen. Die anderen Lösungen sind in der Umsetzung ein klein wenig komplexer, sorgen aber im Gegenzug für eine insgesamt sauberer aufgestellte Konfiguration.

Bevor ich die jedoch lang und breit erkläre, warte ich auf eine entsprechende Reaktion deinerseits.

FFab

(Themenstarter)

Anmeldungsdatum:
27. Februar 2009

Beiträge: 26

Danke für die Vorschläge. Ich habe versucht, Vorschlag 1 nachzuvollziehen. Er lief aber darauf hinaus, dass nichts zu ändern ist - es sei denn, ich habe etwas nicht richtig verstanden.

Inzwischen habe ich die Lösung unter https://mariadb.com/kb/en/systemd/#configuring-access-to-home-directories gefunden. Für Kubuntu 18.04 ist folgende Änderung vorzunehmen: In der Datei

/etc/systemd/system/mysql.service (ist Link zu /lib/systemd/system/mariadb.service)

wird unter

# Prevent accessing /home, /root and /run/user

die Option

ProtectHome=true

zu

ProtectHome=false

geändert. Anschließend

sudo systemctl daemon reload
sudo systemctl start mariadb

eingegeben.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Erstmal danke für den Tipp mit der Variablen ProtectHome - die kannte ich bisher nicht.

Ein kleiner Tipp zum Ändern von Service Units: Mit

systemctl edit mariadb 

oder eben dem Namen der zu bearbeitenden Service Unit kannst du eine Override-Datei in der Verzeichnishierarchie unterhalb von /etc/systemd/system erstellen (hier z.B. /etc/systemd/system/mariadb.service.d/override.conf). Trägst du dort

[Service]
ProtectHome=false

ein und speicherst diese Datei dann, kannst du diese mit

systemctl daemon-reload 

neu laden und dann mit

systemctl restart mariadb 

zur Wirkung bringen.

Warum nun mit Overrides arbeiten? Ein Grund ist der, dass die Dateien in /lib beim nächsten Paketupdate überschrieben werden könnten und damit die Änderungen unversehens weg sind. Man kann so auch recht schnell feststellen, welche Einstellungen man im Vergleich zum Standard ändert.

systemctl cat mariadb 

zeigt dann beispielsweise erst die Inhalte der regulären Service Unit an und am Schluss dann die Override-Konfiguration.

Antworten |