MariaDB mySQL backup und wiederherstellen in Docker

Sobald du Docker für eine MariaDB- oder MySQL-Datenbank nutzt, ist das Einspielen oder Sichern einer bestehenden Datenbank etwas komplexer, da die Container vom Hostsystem getrennt sind. Über einen einfachen Trick kannst du dennoch komfortabel Backups erstellen und wiederherstellen.
Du kannst z.B. in deiner docker-compose.yml
einen Ordner vom Host in den Container mounten, dich dann mit dem Datenbank-Container verbinden und per Kommandozeile arbeiten. Alternativ kannst du die folgenden Einzeiler nutzen, um deine Datenbank direkt zu exportieren oder zu importieren.
Breaking Change (Mai 2024):
MariaDB hat im Mai 2024 eine neue Direktive in die Dumps von mariadb-dump
/mysqldump
eingeführt. Dumps, die mit aktuellen MariaDB-Versionen erstellt wurden, können von älteren MySQL/MariaDB-Clients nicht mehr eingespielt werden und führen zu Fehlern.
Backup mittels mysqldump
docker exec db_container_name mysqldump [--user nutzername] [--password=deinpasswort] datenbank_name > /dein/backup/pfad/db.sql
Merke:
Für ältere MariaDB- oder MySQL-Images kann weiterhinmysqldump
genutzt werden. Der Befehl funktioniert sowohl für MariaDB als auch für MySQL, sofern das jeweilige Tool im Container installiert ist.
Backup mit mariadb-dump
Ab MariaDB 11.0.1 ist mysqldump
im offiziellen Docker-Image nicht mehr enthalten und wurde durch mariadb-dump
ersetzt. Verwende daher bevorzugt mariadb-dump
für Backups. Das Vorgehen ist identisch:
docker exec db_container_name mariadb-dump [--user nutzername] [--password=deinpasswort] datenbank_name > /dein/backup/pfad/db.sql
Wiederherstellen der Datenbank
Um ein Backup zurückzuspielen, verwende folgenden Befehl:
docker exec -i db_container_name mysql [--user nutzername] [--password=deinpasswort] datenbank_name < /dein/backup/pfad/db.sql
Hier ist der Befehl für MariaDB immer noch gleich!
Backup und Wiederherstellen in einem Befehl
Falls du mal zu dem Fall kommst, dass du die Datenbank aus einem Datenbank-Container exportieren und in einen neuen importieren möchtest, hilft dir folgender Befehl (MYSQL):
docker exec db_container_name mysqldump [--user nutzername] [--password=deinpasswort] datenbank_name | docker exec -i zweiter_db_container_name mysql [--user nutzername] [--password=deinpasswort] -C datenbank_name
Für MariaDB-Datenbanken wird nun folgender Befehl eingesetzt:
docker exec db_container_name mariadb-dump [--user nutzername] [--password=deinpasswort] datenbank_name | docker exec -i zweiter_db_container_name mysql [--user nutzername] [--password=deinpasswort] datenbank_name
Cheers!