MySQL-Backups, konsistent und verschlüsselt.
DBackup sichert jede Datenbank aus einem konsistenten Snapshot, mit ihren Routinen und Events, solange Sie sie nicht ausschalten. Es verschlüsselt die Dumps mit AES-256-GCM, wenn der Job einen Schlüssel hat, und legt sie auf dem Speicher Ihrer Wahl ab.
Open Source unter GPL-3.0 · läuft auf Ihrem eigenen Server- VerbindenDirekt zu mysql:3306
- Dumpmariadb-dump --single-transaction --routines --events --databases shop
- VerschlüsselnGzip und AES-256-GCM
- HochladenHetzner Object Storage
- Aufbewahren7 täglich, 4 wöchentlich, 12 monatlich
- MeldenDiscord · #backups
- Getestet mit 5.7 und 9.1
- MySQL 5.7 bis 9
- Geschrieben von mariadb-dump
- Reines SQL
- Über SSH läuft der Dump auf Ihrem Server
- Direkt oder über SSH (Beta)
- Datenbanken wählen und neu benennen
- Wiederherstellung in der App
So läuft ein MySQL-Backup
Vier Schritte, jeder mit einem Werkzeug oder Format, das Sie auch selbst nutzen könnten. DBackup führt sie nach Zeitplan aus und meldet sich, wenn einer scheitert.
- 1Dump
--single-transactionliest die InnoDB-Tabellen jeder Datenbank zu einem Zeitpunkt, ohne Schreibzugriffe zu blockieren. - 2KomprimierenDBackup kann jeden Dump mit Gzip oder Brotli komprimieren. Das SQL darin bleibt reiner Text.
- 3VerschlüsselnAES-256-GCM mit dem Schlüssel eines Verschlüsselungsprofils, für jeden Dump einzeln. Darin bleibt der Dump, was das Werkzeug geschrieben hat.
- 4AblegenHochgeladen zu einem oder mehreren der 13 Speicherziele, jedes mit eigener Aufbewahrung, von einer einfachen Anzahl bis täglich, wöchentlich, monatlich und jährlich.
Drei Schalter und eine Prüfung pro Datenbank
Unter Options legt die Quelle fest, was in den Dump kommt. Alle drei Schalter sind an, solange Sie sie nicht ausschalten.
Das Passwort erreicht das Dump-Werkzeug in einer temporären Datei, die nur ihr Besitzer lesen kann, nie über die Kommandozeile.
- Konsistenter Snapshot
--single-transactionLiest InnoDB-Tabellen zu einem Zeitpunkt, ohne Schreibzugriffe zu blockieren. Ausgeschaltet werden die Tabellen jeder Datenbank gesperrt, solange sie gesichert wird. - Gespeicherte Prozeduren und Funktionen
--routinesSichert die Routinen jeder Datenbank mit ihren Tabellen. - Events
--eventsSichert die geplanten Events jeder Datenbank.
Vor jedem Dump prüft DBackup, was der Login lesen darf. Darf er die Events oder den Inhalt einer Routine nicht lesen, wird diese Datenbank ohne sie gesichert, mit einer Warnung im Lauf.
Alle Datenbanken in einem Archiv
Wählen Sie einige Datenbanken eines Servers, oder lassen Sie die Auswahl leer, dann sichert jeder Lauf alle außer den Systemschemas. Jede bekommt ihren eigenen Dump in einem TAR mit Manifest und einem Verzeichnis der Prüfsummen.
- Mit leerer Auswahl nimmt der nächste Lauf eine neue Datenbank mit.
- Stellen Sie eine Datenbank unter neuem Namen wieder her, dann schreibt die App ihre Zeilen
USEundCREATE DATABASEbeim Einspielen um. - Unverschlüsselt öffnet sich das Archiv mit
tar -xf, und jeder Dump ist eine SQL-Datei, mit Gzip oder Brotli komprimiert, wenn der Job komprimiert.
- TARshop-mysql_2026-10-08_03-00-00.tar182 MB
- { }manifest.json
- DIRdatabases/
- DBshop.sql.gz96 MB
- DBblog.sql.gz41 MB
- DBcrm.sql.gz45 MB
- { }index
$ node dbackup-recover.js --extract shop-mysql_2026-10-08_03-00-00.tar ./restored databases/shop$ mariadb -u root -p < ./restored/databases/shop.sql
Zurückholen ohne DBackup
Jeder Dump ist reines SQL, erstellt mit --databases, er legt seine Datenbank also selbst an und wählt sie aus. Das Recovery Kit entschlüsselt und entpackt ihn, und der mariadb-Client, mit dem auch DBackup wiederherstellt, spielt ihn zurück.
Das Recovery Kit aus dem Vault besteht aus einem Skript und Ihrem Schlüssel. Es entschlüsselt und entpackt einen Dump und prüft seine SHA-256-Summe, bevor es die Datei schreibt.
Warum wir das so gebaut habenIn fünf Minuten startklar
DBackup ist ein Container. Stellen Sie ihn neben Ihre Datenbank, geben Sie ihm einen Login und legen Sie den ersten Job an.
services:
dbackup:
image: skyfay/dbackup:latest
restart: always
ports:
- "3000:3000"
environment:
- ENCRYPTION_KEY=${ENCRYPTION_KEY} # openssl rand -hex 32
- BETTER_AUTH_SECRET=${BETTER_AUTH_SECRET} # openssl rand -base64 32
- BETTER_AUTH_URL=https://localhost:3000
volumes:
- ./data:/data
mysql:
image: mysql:9
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
Fragen zu MySQL
MySQL 5.7 und neuer. Die Integrationstests laufen gegen 5.7 und 9.1. Ein älterer Server bekommt eine Warnung, und der Dump läuft trotzdem.
Im Docker-Image läuft mariadb-dump, die MariaDB-Fassung von mysqldump, die auch MySQL sichert. Über SSH nimmt es mariadb-dump oder mysqldump, je nachdem, was der Server hat.
Nicht mit dem konsistenten Snapshot, der standardmäßig an ist. Er liest InnoDB-Tabellen zu einem Zeitpunkt, während Schreibzugriffe weiterlaufen. Schalten Sie ihn aus, werden die Tabellen jeder Datenbank gesperrt, solange sie gesichert wird.
SELECT, SHOW VIEW, TRIGGER und EVENT, dazu LOCK TABLES bei ausgeschaltetem Snapshot. Muss eine Wiederherstellung eine Datenbank anlegen, fragt sie einmalig nach einem Admin-Login.
Ja. Jeder Dump ist eine reine SQL-Datei. Das Recovery Kit holt sie heraus, verschlüsselt oder nicht, und entpackt sie, mit nichts als Node.js. Danach geben Sie sie an den mariadb-Client, mit dem auch DBackup wiederherstellt.
Weitere Datenbanken
Alle IntegrationenIhr erstes MySQL-Backup läuft heute Nacht.
Ein Container, eine Compose-Datei und ein Job. Kostenlos und Open Source.