WP Manifestindependent plugin directory
manifest / updates / wp-oneclick-db-backup

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

0stars
1forks

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.zip

Readme

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 einzelne INSERT-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

  1. Ordner wp-oneclick-db-backup nach wp-content/plugins/ kopieren (oder das Repo als ZIP herunterladen und im Backend unter Plugins → Installieren → Hochladen einspielen)
  2. Plugin aktivieren
  3. 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 .htaccess greift 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 gegen max_execution_time von FastCGI/nginx). Dann ocdb_chunk_size senken oder große Log-Tabellen über ocdb_exclude_tables ausschließen.
  • Keine Zeitsteuerung. Bewusst manuell – ein Klick, ein Backup.

Lizenz

GPL-2.0 – siehe LICENSE.

Read the full README on GitHub →