Pinguin working on Servers (Bild © DALL-E)
Voraussetzungen
- Ein Ubuntu 20.04 Server, der gemäß der Anleitung zur Ersteinrichtung des Servers eingerichtet wurde, mit einem Nicht-Root-Benutzer mit sudo-Rechten.
- MySQL ist auf deinem Server installiert. Wenn du MySQL installieren musst, folge dem Leitfaden zur Installation von MySQL unter Ubuntu 20.04.
In dieser Anleitung wird ein Blockspeichergerät mit dem Namen /mnt/volume-nyc1-01 als Beispiel für einen neuen Speicherort für das MySQL-Datenverzeichnis verwendet.
Schritt 1: Verschieben des MySQL-Datenverzeichnisses
Identifiziere zunächst den aktuellen Speicherort des Datenverzeichnisses und schließe MySQL, um eine Beschädigung der Daten zu verhindern:
Öffne MySQL mit administrativen Anmeldedaten. Frag den Speicherort des MySQL-Datenverzeichnisses ab:
$ sudo mysql
mysql:
SELECT @@datadir;
Darauf folgt eine ähnliche Ausgabe:
+-----------------+
| @@datadir |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.01 sec)
Diese Ausgabe gibt den Pfad aus, wo die MySQL Daten sich auf dem System befinden. In diesem Fall unter * /var/lib/mysql/*.
Wir verlassen anshcließend den sql client mit exit:
mysql:
exit
Danach beenden wir den MySQL-Server, um den Umzug vorzubereiten:
$ sudo systemctl stop mysql
Als Nächstes kopieren wir das bestehende Datenverzeichnis mit rsync an den neuen Ort und beachten, dass die Berechtigungen erhalten bleiben. Der Ordner kann auch eine andere Partition oder Festplatte sein.
$ sudo rsync -av /var/lib/mysql /home/neuedb
Nachdem die Kopie überprüft wurde und auch korrekt in dem Ordner zu finden ist, wird das ursprüngliche Datenverzeichnis als Backup umbenannt:
$ sudo mv /var/lib/mysql /var/lib/mysql.bak
Schritt 2: Verweisen von MySQL auf das neue Datenverzeichnis
Um auf den neuen Pfad der Datenbank zu verweisen, muss die MySQL-Konfiguration geändert werden, damit der MySQL-Server das neue Datenverzeichnis verwendet:
Hierfür öffnen wir die MySQL-Konfigurationsdatei in einem Texteditor, z. B. nano oder vim:
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
Hier ändern wir die Zeile datadir mit dem neuen Pfad:
conf /etc/mysql/mysql.conf.d/mysqld.cnf
...
datadir=/home/neuedb
...
Speichere die Änderungen und schließe den Editor mit der Eingabe von Doppelpunkt auf der Tastatur, gefolgt von wq (was bedeutet write and quit).
Schritt 3: Konfigurieren der AppArmor Zugriffskontrollregeln
Danach müssen noch die Einstellungen von AppArmor angepasst werden, damit MySQL in das neue Verzeichnis schreiben kann:
Hierfür bearbeiten wir die Alias-Datei von AppArmor wie folgt:
$ sudo vim /etc/apparmor.d/tunables/alias
Hier fügen wir eine Alias-Regel am Ende der Datei hinzu:
conf /etc/apparmor.d/tunables/alias
...
alias /var/lib/mysql/ -> /home/neuedb/,
...
Nun starten wir AppArmor neu, um die Änderungen zu übernehmen:
$ sudo systemctl restart apparmor
Schritt 4: Neustart und Überprüfung von MySQL
Für einen reibungslosen Neustart muss noch ein leerer Ordner erstellt werden, damit MySQL-Server auch starten/neustarten kann, da das Skript die Existenz eines Symlinks oder Ordners voraussetzt.
$ sudo mkdir /var/lib/mysql/mysql -p
Starte MySQL neu und überprüfe, ob es das neue Datenverzeichnis verwendet:
$ sudo systemctl start mysql
Überprüfe den Status von MySQL, um sicherzustellen, dass er läuft:
$ sudo systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-05-14 08:30:43 UTC; 16min ago
Process: 13364 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 13379 (mysqld)
Status: "Server is operational"
Tasks: 37 (limit: 9255)
Memory: 368.5M
CGroup: /system.slice/mysql.service
└─13379 /usr/sbin/mysqld
Logge dich in MySQL ein und frage das Datenverzeichnis erneut ab, um die Änderung zu bestätigen:
$ sudo mysql
mysql:
SELECT @@datadir;
Wenn es alles richtig verlief, sollte die Ausgabe wie folgt aussehen:
+------------------+
| @@datadir |
+------------------+
| /home/neuedb/ |
+------------------+
1 row in set (0.00 sec)
Nachdem du bestätigt hast, dass die Kopie erfolgreich übertragen wurde und funktioniert, kannst du das Backup-Datenverzeichnis löschen, falls du es nicht mehr brauchst:
$ sudo rm -Rf /var/lib/mysql.bak
Starte MySQL ein letztes Mal neu, um sicherzustellen, dass alles richtig funktioniert.
Fazit
Du hast das Datenverzeichnis von MySQL erfolgreich an einen neuen Ort auf deinem Ubuntu 20.04 Server verschoben. Diese Anpassung kann dazu beitragen, den Speicherplatz effizienter zu verwalten und die Leistung von MySQL zu verbessern. Man kann per RSync aber auch Datenbanken von einem auf einen anderen Server migrieren.