Ich benutze auf einem Rechner parallel mehrere Linux-Systeme mit gemeinsamen Nutzerdaten. Die Datenbank-Dateien der MariaDB will ich daher nicht auf der System-Partition ablegen, sondern auf einem von allen Systemen erreichbaren Ort, z.B. auf einem Verzeichnis der /home-Partition.
Das geht so:
- Den alten DB-Server herunterfahren und Status prüfen:
$ sudo systemctl stop mariadb
$ sudo systemctl status mariadb - Datenverzeichnis kopieren und altes Verzeichnis umbenennen:
$ sudo rsync -av /var/lib/mysql /home
$ sudo mv /var/lib/mysql /var/lib/mysql.bak - In der MariaDB-Konfigurationsdatei /etc/mysql/mariadb.conf.d/50-server.cnf das Datenverzeichnis ändern:
datadir = /home/mysql - Service-Konfiguration für mariadb-Service in /usr/lib/systemd/system/mariadb.service ändern, um Daten auf der /home Partition zu erlauben:
ProtectHome=false
und systemd neu laden:
$ sudo systemctl daemon-reload - DB-Server wieder starten und prüfen:
$ sudo systemctl start mariadb
$ sudo systemctl status mariadb
Schritt 3 bis 5 muss dann auf allen anderen beteiligten Systemen wiederholt werden.
Wenn Server mit den von einem anderen System kopierten Daten wegen Rechteproblemen nicht startet, kann das an unterschiedlichen user- und group-IDs der mysql-Nutzer liegen. Sie werden während der mariadb-Installation neu angelegt werden und haben keine festen IDs. Dann sollte man prüfen, ob user- und group-ID des mysql-Users mit denen der Daten übereinstimmen:
$ ls -l /home|grep mysql
drwxr-xr-x 6 <user-id> <group-id> 4096 Okt 18 12:45 mysql
Falls nicht, müssen die User- und Group-IDs angepasst werden (vorher prüfen, sie unbenutzt sind):
$ sudo groupmod -g <group-id> mysql
$ sudo usermod -g <group-id> -u <user-id> mysql
Dann den DB-Server wieder starten.
Eventuelle DB-Fehler finden sich im MariaDB log file /var/log/mysql/error.log.
Laufen die DB-Server auf allen Seiten, kann das ursprüngliche Datenverzeichnis (/var/lib/mysql.bak) gelöscht werden.
Die Verzeichnisse beziehen sich auf eine Debian 10 Installation und müssen evtl. angepasst werden.
Nachtrag: Beim Update auf Debian 10.2 wurde ungefragt die MariaDB-Konfiguration in /usr/lib/systemd/system/mariadb.service überschrieben. Dadurch startete der Datenbank-Service nicht mehr und meldete folgende Fehler im syslog:
Starting MariaDB 10.3.18 database server… [Note] /usr/sbin/mysqld (mysqld 10.3.18-MariaDB-0+deb10u1) starting as process 14486 … [Warning] Can't create test file /home/mysql/mysql.lower-test #007/usr/sbin/mysqld: Can't change dir to '/home/mysql/' (Errcode: 13 "Permission denied") [ERROR] Aborting
Das Rechte-Problem im /home-Verzeichnis deutet zwar recht eindeutig auf die ProtectHome-Einstellung hin, das kommentarlose Überschreiben der Konfigurationsdatei ist trotzdem nicht die feine Art.
Nach dem Ändern von
ProtectHome=true
in /usr/lib/systemd/system/mariadb.service auf
ProtectHome=false
startet der DB-Server jedenfalls wieder problemlos.