Ein-Klick Datenbank-Backup
WordPress Plugin that adds a one-click database backup button to the Dashboard. Pure PHP via $wpdb, no mysqldump required. Works down to WP 2.7 / PHP 5.2.
by Studio H8 · github.com/weshouldfight/wp-oneclick-db-backup
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/weshouldfight/wp-oneclick-db-backup/archive/refs/heads/main.zipReadme
Ein-Klick Datenbank-Backup
WordPress-Plugin, das einen Button ins Dashboard legt, über den sich die komplette Datenbank mit einem Klick sichern lässt.
Der Dump wird in reinem PHP über $wpdb erzeugt – kein mysqldump, keine Shell,
keine externen Dienste. Damit läuft das Plugin auch auf Shared Hosting, wo
exec() gesperrt ist.
Features
- Dashboard-Widget mit großem Button, plus Verwaltungsseite unter Werkzeuge → Datenbank-Backup
- Vollständiger SQL-Dump: alle Tabellen der Datenbank inklusive Plugin-Tabellen und Views – nicht nur die mit WordPress-Präfix
- gzip-komprimiert, falls zlib verfügbar ist
- Download und Löschen direkt aus dem Backend, jeweils Nonce-geschützt
- Automatisches Aufräumen: die letzten 10 Sicherungen bleiben liegen, ältere werden entfernt
- Speicherschonend: liest in Blöcken von 500 Zeilen und leert den
$wpdb-Cache dazwischen, begrenzt einzelneINSERT-Statements auf 500 KB (max_allowed_packet) - Binärspalten (
BLOB,BINARY,BIT) werden hexadezimal geschrieben, damit sie den Reimport unbeschadet überstehen
Kompatibilität
Bewusst low-level gehalten, damit es auch in alten Installationen läuft:
| WordPress | 2.7+ (die Verwaltungsseite allein ab 2.3) |
| PHP | 5.2+ – kein [], keine Closures, kein __DIR__, kein ?? |
| MySQL | 4.1+ |
Alles, was jünger als WP 2.3 ist, ist über function_exists() bzw. method_exists()
abgesichert: esc_html()/wp_specialchars(), esc_url()/clean_url(), size_format(),
date_i18n(), wp_mkdir_p(), wp_add_dashboard_widget(), $wpdb->suppress_errors().
Statt $wpdb->_real_escape() (erst ab WP 4.8.3 öffentlich) kommt ein eigener Escaper zum
Einsatz, und die Tabellenliste wird über SHOW TABLES statt über $wpdb->tables ermittelt.
Installation
- Ordner
wp-oneclick-db-backupnachwp-content/plugins/kopieren (oder das Repo als ZIP herunterladen und im Backend unter Plugins → Installieren → Hochladen einspielen) - Plugin aktivieren
- Fertig – der Button steht im Dashboard
Wo liegen die Sicherungen?
In wp-content/uploads/db-backups-<zufallssuffix>/. Das Zufallssuffix wird bei der ersten
Sicherung erzeugt und in der Option ocdb_backup_dir gespeichert, damit der Pfad nicht
erratbar ist. Zusätzlich legt das Plugin dort eine .htaccess mit Deny from all und eine
leere index.php ab.
Hinweis für nginx: Die
.htaccessgreift dort nicht. Den Pfad bitte zusätzlich in der Serverkonfiguration sperren, zum Beispiel:location ~ ^/wp-content/uploads/db-backups- { deny all; }
Wiederherstellen
Das Ergebnis ist ein normaler SQL-Dump, es braucht also kein Gegenstück im Plugin:
gunzip < db-meinedb-20260813-115300.sql.gz | mysql -u USER -p DATENBANK
Oder über phpMyAdmin importieren (dort vorher entpacken, wenn die Datei zu groß für den
Upload ist). Der Dump enthält DROP TABLE IF EXISTS vor jeder Tabelle, überschreibt den
Bestand also vollständig.
Anpassen
Vier Filter, damit du pro Installation nichts am Code ändern musst:
// Wer darf sichern? Default: manage_options (Multisite: manage_network_options)
add_filter('ocdb_capability', function () { return 'edit_pages'; });
// Tabellen überspringen, etwa aufgeblähte Log-Tabellen
add_filter('ocdb_exclude_tables', function ($tables) {
$tables[] = 'wp_statistics_visitor';
return $tables;
});
// Zeilen pro SELECT – bei knappem Speicher kleiner setzen
add_filter('ocdb_chunk_size', function () { return 200; });
// Wie viele Sicherungen aufgehoben werden (0 = alle behalten)
add_filter('ocdb_keep_backups', function () { return 30; });
Grenzen
- Nur die Datenbank. Uploads, Themes und Plugins sichert das Plugin nicht.
- Ein Durchlauf, kein Resume. Bei sehr großen Datenbanken kann der Request in ein
Timeout des Webservers laufen (
set_time_limit(0)hilft nur gegen das PHP-Limit, nicht gegenmax_execution_timevon FastCGI/nginx). Dannocdb_chunk_sizesenken oder große Log-Tabellen überocdb_exclude_tablesausschließen. - Keine Zeitsteuerung. Bewusst manuell – ein Klick, ein Backup.
Lizenz
GPL-2.0 – siehe LICENSE.