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 weiterhin mysqldump 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!