Search by

pdir / contao-db-restore-bundle

MDevster

Datenbank-Backups im Contao-Backend hochladen und einspielen – ohne SSH und ohne phpMyAdmin.

Package info

github.com/pdir/contao-db-restore-bundle

Type:contao-bundle

pkg:composer/pdir/contao-db-restore-bundle

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-11-03 17:02 UTC

This package is auto-updated.

Last update: 2026-11-03 17:05:24 UTC


README

Datenbank-Backups direkt im Contao-Backend hochladen und einspielen – für Hoster ohne SSH und ohne phpMyAdmin.

Der Restore nutzt Contaos eigenen BackupManager, also dieselbe Logik wie php vendor/bin/contao-console contao:backup:restore, aber ohne exec(), proc_open() oder PHP-CLI-Binary.

Funktionen

  • Backend-Menü System → DB-Backup einspielen (nur Administratoren)
  • Upload von .sql / .sql.gz – wird automatisch unter einem gültigen Contao-Backup-Namen in var/backups/ gespeichert
  • Per FTP nach var/backups/ gelegte Dateien mit beliebigem Namen (z. B. export.sql) per Klick „übernehmen“
  • Sicherheits-Backup der aktuellen Datenbank vor jedem Restore (vor-restore__….sql.gz)
  • Optional Fremd-Dumps aus phpMyAdmin/mysqldump (überspringt Contaos Herkunftsprüfung)
  • Bestätigung durch Eintippen von EINSPIELEN, Logeintrag im Systemlog

Voraussetzungen

Contao 5.3 bis 5.7 sowie Contao 6.x

  • Contao 5.3–5.7: PHP 8.2+, Symfony 6.4 oder 7.x
  • Contao 6.x: PHP 8.4+, Symfony 7.4 oder 8.x

Installation

Contao Manager

Im Contao Manager unter Pakete nach pdir/contao-db-restore-bundle (oder „DB Restore“) suchen, das Paket hinzufügen und die Änderungen anwenden.

Composer

composer require pdir/contao-db-restore-bundle

Direkt aus dem Git-Repository

Für eine unveröffentlichte Version das Repository in der composer.json des Projekts eintragen:

"repositories": [
    { "type": "vcs", "url": "https://github.com/pdir/contao-db-restore-bundle" }
],
"require": {
    "pdir/contao-db-restore-bundle": "dev-main"
}

Alternativ lokal über ein path-Repository.

Ein „Datenbank aktualisieren“ ist nach der Installation nicht nötig – das Bundle legt keine Tabellen an.

Ablauf

  1. Dump hochladen (oder per FTP nach var/backups/ legen und „Übernehmen“ klicken)
  2. Backup auswählen, EINSPIELEN eintippen, einspielen
  3. Danach im Contao Manager Datenbank aktualisieren ausführen, falls der Dump aus einer älteren Contao-Version stammt, und unter System → Systemwartung den Cache leeren

Wichtige Hinweise

  • Aufbewahrungsrichtlinie: Contao löscht beim Erstellen eines Backups alte Backups gemäß contao.backup.keep_max (Standard 5) und keep_intervals. Das Sicherheits-Backup vor einem Restore löst diese Aufräumregel nicht aus: Die vorhandenen Backups liegen währenddessen kurz in var/backups/.db-restore-hold/ und werden danach zurückverschoben – auch nach einem abgebrochenen Request beim nächsten Aufruf der Seite. Sicherheits-Backups sammeln sich deshalb an und sollten gelegentlich gelöscht werden. Backups über contao:backup:create oder den Contao Manager räumen weiterhin wie gewohnt auf.
  • Timeouts: Der Import läuft in einem einzigen Web-Request (set_time_limit(0) + ignore_user_abort). Manche Hoster begrenzen die Laufzeit zusätzlich auf FastCGI-/Proxy-Ebene. Für Dumps im GB-Bereich ggf. BigDump oder den Contao Manager nutzen.
  • Fremd-Dumps: Contaos Importer arbeitet zeilenweise und führt eine Anweisung aus, sobald eine Zeile mit ; endet. Normale Exporte (Tabellen + Daten) funktionieren. Dumps mit DELIMITER (Trigger, Stored Procedures) werden nicht unterstützt.
  • Login: Der Dump überschreibt auch tl_user. Weicht der Benutzerstand ab, ist danach ein neuer Login nötig.
  • Doctrine DBAL 4.5.0: Backups aus dieser Version enthalten jeden Unique-Key doppelt und lassen sich nicht einspielen (1061 Duplicate key name, siehe contao/contao#10450). Das Bundle lässt sich deshalb nicht zusammen mit doctrine/dbal 4.5.0 installieren. Bereits damit erstellte Backups bleiben unbrauchbar; als Workaround die Teile CONSTRAINT `…` UNIQUE (…), aus einer Kopie des Dumps entfernen.
  • Tabellen ignorieren: Es gelten Contaos Einstellungen unter contao.backup.ignore_tables.
  • Seit Contao 5.7 liegt AbstractBackendController unter Contao\CoreBundle\Controller\Backend\, der alte Namespace fällt in Contao 7 weg. BackendControllerBase wählt automatisch die passende Klasse, unter 5.7 und 6.x gibt es deshalb keine Deprecation-Meldung.

Anzeige in der Erweiterungsliste

Die Datei .promo.json gehört nicht zum Bundle selbst, sondern steuert die Anzeige auf extensions.contao.org, die das interne Werkzeug contao-promo bei jedem Feature-Release (x.y.0 mit [Added]-Einträgen in der CHANGELOG.md) erzeugt. Sie enthält:

  • name: Produktname auf dem Banner
  • screenshot: Bild rechts im Banner, hier docs/db-restore-promo.png (Format 5:4, wird links oben beschnitten)
  • template: Banner-Vorlage (pdir)
  • de / en: Überschrift und drei kurze Features je Sprache – lange Features werden auf dem Banner abgeschnitten

Vor einem Release lässt sich das Banner lokal prüfen:

cd ../contao-promo
node bin/scan.mjs --local ../contao-db-restore-bundle --version 1.0.0

Die Screenshots in docs/ stammen aus einer Contao-6-Testinstallation (db-restore-backend.png, db-restore-backend-dark.png für Dokumentation, db-restore-promo.png für das Banner).

Lizenz

MIT