Du betrachtest gerade MySQL Datenbank umziehen migrieren

MySQL Datenbank umziehen migrieren

Eine Docker MySQL Datenbank umziehen migrieren. Auf ein anderes Laufwerk oder ein anderen oder neuen Server – oder PC.

Auch die Migration von Volumes zu Bind-Mounts – und umgekehrt – kannst du damit erledigen. So geht’s.

Einleitung:

Eine SQL-Datenbank ist bei Verlust oder Beschädigung weg, und das kann schnell passieren. In der Regel hat das massive Konsequenzen. Oder es fehlen plötzlich die Smileys, und nur noch hässliche Sonderzeichen werden angezeigt – ein klassischer Fall bei falschem Zeichensatz.

Ich habe die Befehlszeilen überwiegend in PowerShell ausgeführt. Wenn du „CMD“ bzw. die Eingabeaufforderung verwendest, funktionieren manche Befehle nicht wie erwartet – aber wir werden „CMD“ später trotzdem noch brauchen.

Wir gehen hier den Weg mit Docker Desktop für Windows und WSL (Windows Subsystem for Linux). Das unterscheidet sich nicht groß von der Verwendung unter Linux. Du musst nur ein paar Befehle anpassen. Die Docker-Kommandos sind gleich.

Wenn du nur ein kleines, einfaches Datenvolumen oder einen Mount-Point bearbeiten möchtest, ist dieser Beitrag besser für dich geeignet:

Wenn es sich bei deinem Projekt um eine PostgreSQL-Datenbank handelt, wechsle bitte zu diesem Beitrag – das Handling unterscheidet sich nämlich von dem einer MySQL-Datenbank.

Persönliche Notiz:

Ich persönlich fasse eine MySQL-Datenbank nur dann an, wenn es wirklich sein muss. Da kann viel schiefgehen – oder einfach nicht wie erwartet funktionieren. Besonders bei der Wiederherstellung einer mysqldump-Datei kann es Probleme geben, wenn du PowerShell verwendest.

Gerade beim Zeichensatz utf8mb4, der für europäische Sprachen (also auch Umlaute wie ö, ä, ü, Ö, Ä, Ü, ß) zwingend erforderlich ist, sollte die Wiederherstellung über die klassische CMD-Eingabeaufforderung (DOS-Fenster) erfolgen.

Alle Details findest du im Beitrag und im Video.

Aber wie gesagt: Es kann schnell etwas schieflaufen – hab immer mehrere Backups parat!


Hinweise zu Datensicherung

Bei der Bearbeitung von Speichermedien: Festplatte, Virtuellen Festplatte, USB Stick, Volumen usw. sowie Datenbanken kann es zur Datenverlust kommen, was mehrere Ursachen haben kann. Eine Haftung ist generell ausgeschlossen.

Wenn Du die, die in diesem Beitrag, behandelten Themen und Beispielen folgst und diese Verwendest, empfehle ich dir ausdrücklich, fertige vorher eine Datensicherung an!


Video: MySQL Datenbank umziehen migrieren

Sprache: 🇩🇪
☝️ Benutze YouTube Untertitel für alle Sprachen.

Der Weg: Rohdatenbank kopieren/exportieren

Der schnellste Weg ist das Kopieren der Rohdatenbank – also direkt auf Dateiebene.

Da ich dieses Verfahren regelmäßig anwende, kann ich aus Erfahrung Folgendes sagen:
Das Kopieren funktioniert in der Regel nur beim ersten Versuch.

Meine Vermutung: Die Datei mysql.sock wird nach dem ersten Zugriff nicht mehr korrekt eingebunden oder verbunden. Recherchiert habe ich das allerdings nie – es bleibt also eine Annahme.

Vorgehensweise

  1. Datenbank stoppen, zum Beispiel mit dem Befehl „docker stop db“.
  2. Die Datenbank mit den unten aufgeführten Befehlen extrahieren.
  3. Anschließend die Konfiguration anpassen, zum Beispiel in der „docker-compose.yml“, in „Portainer“ oder einem anderen Tool, das du verwendest. So wird die Datenbank auf das neue Verzeichnis verweisen. Für den detaillierten Ablauf folge dem Video.
  4. Die neue Konfiguration übernehmen, indem du in Portainer deployst oder mit den Befehlen docker-compose down und docker-compose up -d arbeitest, je nach deiner Konfiguration.
  5. Zum Schluss die Datenbank starten, zum Beispiel mit „docker start db“.

Befehlszeilen

Musterbefehl:

docker run --rm --volumes-from db -v d:/backup:/backup busybox cp -a -r /var/lib/mysql/. /backup/

PowerShell

Mein Befehl z.B. lautet dann korrekt:

docker run --rm --volumes-from db -v d:\"Visual Edit"\wpress-app\dbdata:/backup busybox cp -a -r /var/lib/mysql/. /backup/

PowerShell
  • „-rm“ = Entfernt den Container wider nach dem dieser beendet wurde
  • „–volumes-from“ = Definieren des Volumen das verwendet werden soll
  • „db“ = Name der Datenbank / Container oder die ID. in diesem Fall ist der Datenbankname „db“
  • „-v“ = Volume einbinden
  • „d:\“Visual Edit“\wpress-app\dbdata:/backup“ Festlegen der Pfade für das Volumen. Speichen der Datenbank unter „d:\“Visual Edit“\wpress-app\dbdata“. Datenübergabe im Container ist „:/backup“
  • „busybox“ = Verwende das Programm „busybox“ zum übertragen der Daten
  • „cp“ = Kopiere die Datenbank mit „cp“ (Linux Befehl copy)
  • „-a“ = Übertrage Archive, Besitzer und Rechte
  • „-r“ = Kopiere die Verzeichnis Struktur
  • „/var/lib/mysql/. /backup/“ = „/var/lib/mysql/.“ Praha der Datenbank im Container. Verwende „/backup/ um die Daten zu übergeben.

Bei langen Dateinamen oder Leerzeichen musst du die Pfadangabe in einfache oder doppelte Anführungszeichen “ “ setzen, damit die Übergabe funktioniert.

Ich verwende zur Ausgabe den Pfad d:“Visual Edit“\wpress-app\dbdata, was dem zukünftigen Mount-Point der Datenbank entspricht. Da ich die Datenbank direkt ins Ziel (den zukünftigen Mount-Point) kopiere, muss ich die Datenbank nicht noch extra dorthin kopieren und spare mir so das Theater mit der MySQL.sock-Datei.

Der Weg MySQLdump

Alternativ, oder wenn der oben beschriebene Weg nicht funktioniert, kannst du mit „mysqldump“ arbeiten, um die Datenbank zu übertragen.

Der „mysqldump“-Befehl wird mit der laufenden Datenbank verwendet.

Hier solltest du sicherstellen, dass niemand mehr in der Datenbank arbeitet. Änderungen an der Datenbank nach dem Sichern werden nicht mehr übernommen. Du solltest also für einen sauberen Schnitt und Übergang sorgen.

Befehlszeilen

Musterbefehl:

docker exec -I (SQL Container Name) mysqldump -v --default-character-set=utf8mb4 -u root -p(SQL root Passwort) --all-databases > (Ziel Datei).sql

PowerShell

Mein Befehl z.B. lautet dann korrekt:

docker exec -i db mysqldump -v --default-character-set=utf8mb4 -u root -pPassWort --all-databases > mysql-all-data.sql

PowerShell

Vorgehensweise

  1. Datenbank mit den oben aufgeführten Befehl sichern
  2. Anpassen der Konfiguration z.B. „docker-compose.yml“, „Portainer“ oder was du verwendest. So das die Datenbank das neue Verzeichnis verwendet. Folge hier dem Video, für ein detaillierten Ablauf.
  3. Übernehmen der Neuen Konfiguration mit deploy in „Portainer“ oder mit „docker-compose down“ und „docker-compose up -d“, oder je nach deiner Konfiguration.
  4. Wenn Docker im Ziel Verzeichnis keine neue Datenbank initiiert, erstelle eine mit einem kurzen „PowerShell“ Skript
    docker run -d --name mysql
    -e MYSQL_ROOT_PASSWORD=rootpass -p 3306:3306
    -v mysql_data:/var/lib/mysql `
    mysql:8.0
  5. Stelle die Datenbank mit dem unten Aufgeführten Befehl wieder her
  6. Wenn du unter Punkt 4. Eine Datenbank erstellt hast, remove den container wider.
    docker stop mysql
    docker rm mysql

Wiederherstellung

Musterbefehl

docker exec -i (SQL Container Name) mysql --default-character-set=utf8mb4 -u root -p(SQL root Passwort) < .\mysql-all-data_2025-06-14.sql

CMD-Terminal

Das Passwort für den root User ist das was du bei der Erstellung / Initialisierung angegeben hast. Bei dem unter Punkt 4. ist es „rootpass“ ansonsten findest du es in deiner Datenbankkonfiguration unter docker-compose.yml oder Portainer. Beachte das du das vielleicht in einem „Secret File“ hinterlegt hast.

„CMD“ – Eingabeaufforderung, mein Befehl z.B. lautet dann korrekt:

docker exec -i db mysql --default-character-set=utf8mb4 -u root -pPassWort   < .\mysql-all-data.sql.sql

CMD-Trminal
  • „docker exec“ = Führe im Container folgenden Befehl aus
  • „-i“ = Nicht als Priorisierte Aufgabe ausführen
  • „db“ = Datenbankname
  • „mysql“ = Befehl zur Wiederherstellung
  • „–default-character-set=utf8mb4“ =32”·MB Zeichensatz mit öäüÖÄÜß + Smileys
  • -u root“ = Ausführen als root User
  • -pPassWort“ = Passwort für den root User
  • „.\mysql-all-data.sql“ = Sicherungsdatei die wieder hergestellt werden soll

Es kann sein das in der Eingabeaufforderung ein Fehler ausgegeben wird, der „(Passwort: YES)“ enthält. mache dann einfach zwischen „-pPassWort < .\mysql-all-data.sql.sql“ noch zwei Lehrzeichen. Dann sollte es gehen.

… das war es. Ich hoffe du konntest alles umsetzen, und es hat dir geholfen.

Link zur Unterstützung / Spende für denn Kanal
PayPal Link
Überweisung, Bitcoin und Lightning

#Docker #DockerVolume #MountPoint #Migration #DockerMountPoint #Volume #DockerDaten #DockerDatenUebertragen #DockerDatenKopieren #DockerDatenVerschieben #MySQL  #MySQLmigrieren #MySQLumziehen #MySQLdatenbank

Dieser Beitrag hat einen Kommentar

Schreibe einen Kommentar