WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#126 01.03.2024 20:17:22

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Meine Änderungen an restore.php sind auch in meinem Repository abgelegt: https://github.com/gchriz/wbce-backup-p … fixrestore

Last edited by chriz (02.03.2024 06:32:27)

Offline

Liked by:

berny

#127 02.03.2024 06:40:14

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Die Logausgaben in #124 waren gestern Abend noch nicht ganz schön. Das habe ich nun dort behoben.

Offline

#128 02.03.2024 07:55:40

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Hallo,
ich finde es super, dass Du Dir unser "Sorgenkind", das Backup-Modul, vornimmst. Lass Dich von mangelnden Rückmeldungen hier im Forum nicht entmutigen. Viele lesen einfach nur mit.


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

berny

#129 02.03.2024 08:07:04

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Eben ist mir aufgefallen, dass der Restore der ZIP-Datei leider (auch) keine Fehlermeldungen liefert, wenn eine Ziel-Datei nicht überschrieben (also restored) werden kann.

Und das Problem mit den CONSTRAINTS tritt manchmal auf, aber nicht immer.  roll  Ich habe schon eine Idee, wo das herkommen könnte.

To be continued...

Offline

#130 02.03.2024 10:06:51

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Das Auspacken der ZIP-Datei meldet nun auch eventuell auftretende Fehler.

Während des Bastelns schicke ich den jeweiligen Code-Stand erst einmal ins Repo: https://github.com/gchriz/wbce-backup-p … fixrestore

Offline

#131 03.03.2024 11:04:53

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Da ich beim Backup/Restore "überraschende" ops Effekte hatte, habe ich die im Backend angezeigte Texte etwas überarbeitet.
So wird hoffentlich etwas klarer, was im Detail hinter den Kulissen bei den einzelnen Sicherungstypen geschieht.
(Ansonsten gibt es ja keine Dokumentation außer den Quelltext.)

Leider kann ich keinen Screenshot direkt hier einfügen (oder hab's nicht gefunden) deshalb per Text:

Mein Vorschlag:

(o) Seiten - Alle erstellten Seiten
( ) CMS - Dateien und Datenbanktabellen dieses CMS
( ) Gesamt - Alle Dateien (DOCUMENT_ROOT) und die
    gesamte Datenbank (Rechte für alle DB-Tabellen erforderlich!)

Die Sicherung aller Verzeichnisse und Dateien kann je nach Umfang der installierten Module und Templates sowie der Anzahl Mediendateien lange dauern.
Es werden nur Dateien bis max. 60 MB ins Backup aufgenommen.
Einige Verzeichnisse sind ausgenommen, siehe 'backup_settings.php'.
Leere Verzeichnisse werden nicht gesichert. Verzeichnis-Links wird nicht gefolgt!

Zum Vergleich der bisherige Text:

(o) Alle erstellten Seiten sichern
( ) CMS Sicherung - Nur CMS-Daten und die CMS-Datenbank
( ) Gesamtsicherung - Alle Daten und die gesamte Datenbank
Die Rechte für alle Datenbanken sind dafür erforderlich!

Die Sicherung aller Verzeichnisse und Dateien kann je nach Umfang der installierten Module und Templates sowie der Anzahl Mediendateien lange dauern.
Es werden nur Dateien bis max. 60 MB ins Backup aufgenommen.
Leere Verzeichnisse werden nicht gesichert. Verzeichnis-Links wird nicht gefolgt!

Der Commit ist hier: https://github.com/gchriz/wbce-backup-p … 1cf2cd0474

Offline

#132 04.03.2024 10:41:34

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

So, für den Moment bin ich mit dem erreichten Stand zufrieden.  angel
Ich habe ihn einfach mal "2.8.2"  genannt.

Abgelegt ist meine Version im Branch fixrestore.
Der diff zur offiziellen "2.8.1" ist hier zu sehen: https://github.com/gchriz/wbce-backup-p … fixrestore
Das ZIP-File zur Installation kann hier heruntergeladen werden: https://github.com/gchriz/wbce-backup-p … estore.zip

Falls also jemand ausprobieren möchte...

Offline

Liked by:

florian, berny

#133 07.03.2024 19:37:09

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Weiter geht's... Auch wenn ich mich hier weitestgehend  in einem Monolog befinde... angel

Mein neuer Stand von restore.php kann nun während des Importes der SQL-Datei die WB_URL des Backups in die aktuelle lokale WB_URL umsetzen.
Das ist hilfreich, wenn das Backup nicht am Original-Ort, sondern auf einem anderen Server oder einer anderen URL wiederhergestellt wird. (Siehe z.B. https://forum.wbce.org/viewtopic.php?id=5167)

Ich mache so regelmäßig eine lokale Spiegelinstallation des produktiven Systems.

Die WB_URL des Backups wird aber nicht aus der gesicherten config.php (in der ZIP-Datei) ausgelesen, sondern backup.php schreibt noch ein paar Infos in den Header der SQL-Exports, die dann zur Verfügung stehen. Das finde ich unabhängig von der technischen Nutzung auch für den Admin sinnvoll.

https://github.com/gchriz/wbce-backup-p … fixrestore

Offline

#134 07.03.2024 20:47:42

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Bei der Installation von Backup-Plus wird nun das konfigurierte "backups" Verzeichnis angelegt. Ebenso beim Start von Backup Plus.
Ein weiterer manueller Schritt für einen initialen Restore ist entfallen...

Last edited by chriz (08.03.2024 07:11:25)

Offline

Liked by:

florian

#135 11.03.2024 09:13:43

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Im Moment bin ich erst einmal "fertig" mit der Arbeit an Backup Plus. Ich habe gerade noch etwas am README und am Einstiegsbild ergänzt.

In meinem Repository mit den Commits etc. ist der in den Beiträgen der letzten Tage genutzte Branch fixrestore nun in main gemerged und hier als ZIP-Datei erhältlich. Die Versionsnummer ist vorgreifend auf 2.8.2 gesetzt, damit ein Upgrade möglich ist.

Offline

Liked by:

berny, florian, trnoelli

#136 12.03.2024 09:39:10

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Eine Sache ist mir gerade aufgefallen: Das Backup der Datenbank steigt mit einem 500er aus, wenn es sehr große Tabellen gibt.
(Das sind oft die Tabellen des wbstats-Moduls, ich hatte hier jetzt gerade den Fall, wo allein in der Tabelle _mod_wbstats_hist 13MB Daten  bzw. zigtausende Datensätze enthalten waren.)

Das scheint dann dazu zu führen, dass das Script, das den Datenbankdump erzeugen soll, in einen Timeout läuft oder der Arbeitsspeicher vollläuft - ist leider nicht so genau zu erkennen, was genau schiefläuft, aber jedenfalls wird dann nur eine Sicherung des Dateisystems, ohne DB-Abzug erzeugt.

Wenn ich mit dem Adminer einen DB-Abzug erstelle, sind auch die problematischen Riesentabellen enthalten. Bringt es eventuell was, mal zu schauen, wie die das machen? https://github.com/vrana/adminer/

Ansonsten wäre es hilfreich, wenn im Backup-Tool die Möglichkeit bestünde, bestimmte (WBCE-)Tabellen von der Sicherung auszuschließen.


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

stefanek, berny

#137 10.04.2024 06:28:22

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Ich hab's jetzt (endlich) auch mal im AOR aktualisiert.
https://addons.wbce.org/pages/addons.ph … m&item=159


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

berny, trnoelli

#138 06.11.2024 21:25:27

thanks
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

WBCE 2.0? Ich bekomme leuchtende Augen.

florian wrote:

Wie geht das, habe da nichts in der Benutzerverwaltung gefunden oder war ich zu blind, das zu finden?

Das ist leider noch nicht möglich, gilt bei den Admintools das "Alles oder nichts"-Prinzip.
In der kommenden Hauptversion (WBCE 2.0) wird das aber geändert.

Offline

#139 08.11.2024 18:16:32

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Um diskret von unrealistischen Erwartungen abzulenken ("WBCE 2.0"... das kann noch dauern, sorry, aber 1.6.3 steht vor der Tür und scharrt schon mit den Hufen) - hier zumindest offenbar eine Lösung für das Große-Tabellen-Problem.
In der angefügten backup.php.txt( => kopiere als backup.php nach /modules/backup_plus/) wird jetzt stumpf geprüft, ob der Tabellenname den "üblichen Verdächtigen" (croncheck, wbstats) entspricht - und wenn ja, wird die Tabelle einfach übersprungen. Schon läuft das Backup durch. Ta-daah!


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

#140 08.11.2024 22:48:50

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Zum Ausschliessen von Tabellen würde ich statt der festen Verdrahtung aus #139 in etwa folgendes Konstrukt vorschlagen.
(Zeilennummern bezogen auf Version 2.8.2)

Die Tabellennamen stimmen so noch nicht. Das soll nur ein Beispiel sein.

Und es müsste noch geprüft werden, was beim Restore (Typ 'wbce'') passiert. Es fehlen ja nun Tabellen in der Export-Datei...


diff --git a/backup_settings.default.php b/backup_settings.default.php
index 6d24362..70a19ee 100644
--- a/backup_settings.default.php
+++ b/backup_settings.default.php
@@ -51,6 +51,10 @@ $includeDirs = array('pages');
 $exportTables = array('mod_wysiwyg','mod_menu_link','mod_sitemap','pages','sections');
 
 
+// -------------------- Excludes for any backup type ----------------------------
+// Specify database tables you DO NOT WANT in the SQL export as an array
+$ignoreTables = array('croncheck', 'wbstats');
+
 // -------------------- Excludes for backup type WBCE ---------------------------
 // Specify directories you do NOT want in the backup as an array for backup type "wbce"
 $ignoreWbceDirs = array('backups', 'owncloud','nextcloud','logs','log','cgi-bin');
diff --git a/backup.php b/backup.php
index 2b0feeb..bf0f4dd 100644
--- a/backup.php
+++ b/backup.php
@@ -312,6 +312,10 @@ while ($row = $result->fetchRow()) {
                }
        }
 
+       if (in_array($row[0], $ignoreTables)) {
+               continue;
+       }
+
        //      Add Drop existing tables
        $output .= PHP_EOL."# Drop table ".$row[0]." if exists".PHP_EOL."DROP TABLE IF EXISTS `".$row[0]."`;".PHP_EOL;

Nachtrag:  Das ist nur ein möglicher Lösungsansatz aus dem Stehgreif. Im Detail schaue ich mir das am Wochenende mal an.

Last edited by chriz (08.11.2024 23:27:22)

Offline

Liked by:

florian

#141 09.11.2024 06:52:33

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Und es müsste noch geprüft werden, was beim Restore (Typ 'wbce'') passiert. Es fehlen ja nun Tabellen in der Export-Datei...

Hmja, stimmt. Die Tabellen müssten angelegt werden, aber nicht befüllt werden.


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

#142 09.11.2024 21:06:27

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Hier mein Vorschlag zur optionalen Auslassung von Datenbanktabellen-INHALTEN beim Dump/Backup von Typ "CMS" (="wbce") .

In der Konfigurationsdatei können (Teile von) Tabellennamen angegeben werden.
Standardmäßig ist 'mod_wbstats' eingetragen, so dass alle Tabellen, die auf  %mod_wbstats% passen, speziell behandelt werden...

diff --git a/backup_settings.default.php b/backup_settings.default.php
index 250f4ab..906a2f9 100644
--- a/backup_settings.default.php
+++ b/backup_settings.default.php
@@ -55,6 +55,10 @@ $exportTables = array('mod_wysiwyg','mod_menu_link','mod_sitemap','pages','secti
 // Specify directories you do NOT want in the backup as an array for backup type "wbce"
 $ignoreWbceDirs = array('backups', 'owncloud','nextcloud','logs','log','cgi-bin');
 
+// Specify (optionally part of) database table names you DO NOT WANT in the SQL export as an array.
+// (For example because the table is too big and would terminate the dump process.)
+$ignoreWbceTables = array('mod_wbstats');
+
 
 // -------------------- Excludes for backup type FULL ----------------------------
 // Specify directories you do NOT want in the backup as an array for backup type "full"

... das DROPen und CREATEn der passenden Tabellen wird dann in die SQL-Datei geschrieben. Die Inhalte aber nicht.

diff --git a/backup.php b/backup.php
index d8b8895..a001f0e 100644
--- a/backup.php
+++ b/backup.php
@@ -285,6 +285,24 @@ if ($_GET['type'] == 'wbce') {
        // get ONLY wbce tables
        $prefix = str_replace('_', '\_', TABLE_PREFIX);
        $query = "SHOW TABLES LIKE '".$prefix."%'";
+
+       // identify the (optionally ignored) tables
+       $query2 = "SHOW TABLES where tables_in_" . DB_NAME . " like '".$prefix."%'";
+       foreach( $ignoreWbceTables as $tabpattern) {
+               $query2 .= " and tables_in_" . DB_NAME . " like '%" . $tabpattern . "%'";
+       }
+
+       $result = $database->query($query2);
+       if ($database->is_error()) {
+               die(json_encode(array('code' => 4039, 'error' => $database->get_error())));
+       }
+
+       $tables_to_ignore = array();
+       while ($row = $result->fetchRow()) {
+               $tables_to_ignore[] = $row[0];
+       }
+
+       $log->write('The contents of the following tables are not dumped into the SQL export: '.implode(", ",$tables_to_ignore));
 }
 
 if ($_GET['type'] == 'page') {
@@ -331,6 +349,12 @@ while ($row = $result->fetchRow()) {
        $out = $query2->fetchRow();
 
        $sql_backup .= $out['Create Table'].";".PHP_EOL.PHP_EOL;
+
+       if (in_array($row[0], $tables_to_ignore)) {
+               $output .= $sql_backup.PHP_EOL.PHP_EOL;
+               continue;
+       }
+
        $sql_backup .= "# Dump data for ".$row[0].PHP_EOL;
 
        /**

Ich werde noch ein bisschen dran feilen und testen.

Last edited by chriz (09.11.2024 21:45:20)

Offline

Liked by:

florian

#143 10.11.2024 10:54:36

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Nach ein paar Korrekturen und Veränderungen sieht der diff (zu Version 2.8.2) nun so aus:

diff --git a/backup_settings.default.php b/backup_settings.default.php
index 250f4ab..69a9421 100644
--- a/backup_settings.default.php
+++ b/backup_settings.default.php
@@ -55,6 +55,9 @@ $exportTables = array('mod_wysiwyg','mod_menu_link','mod_sitemap','pages','secti
 // Specify directories you do NOT want in the backup as an array for backup type "wbce"
 $ignoreWbceDirs = array('backups', 'owncloud','nextcloud','logs','log','cgi-bin');
 
+// Specify (optionally part of) database table names you DO NOT WANT in the SQL export as an array.
+// (For example because these tables are too big and would terminate the dump process.)
+$saveAsEmptyWbceTables = array('mod_wbstats');
 
 // -------------------- Excludes for backup type FULL ----------------------------
 // Specify directories you do NOT want in the backup as an array for backup type "full"
diff --git a/backup.php b/backup.php
index d8b8895..b5c54a4 100644
--- a/backup.php
+++ b/backup.php
@@ -275,24 +275,50 @@ $output .= PHP_EOL."SET FOREIGN_KEY_CHECKS=0;".PHP_EOL;
 
 /**
  *     Get table names
- *     Use this one for all tables in DB
- *
  */
+
+// Default: Save all tables with content.
+// Can optionally be configured differently for type "wbce" in config value $saveAsEmptyWbceTables
+$tables_to_save_without_content = array();
+
+// For type "full" and as basis for type "page"
 $query = "SHOW TABLES";
 
 if ($_GET['type'] == 'wbce') {
 
-       // get ONLY wbce tables
+       // get ONLY current wbce tables
        $prefix = str_replace('_', '\_', TABLE_PREFIX);
        $query = "SHOW TABLES LIKE '".$prefix."%'";
-}
 
-if ($_GET['type'] == 'page') {
+       // Get the optionally configured table patterns to identify tables that should be saved without contents.
+       // ==> array $tables_to_save_without_content
+       if (isset($saveAsEmptyWbceTables)) {
+
+               $query2 = "SHOW TABLES where tables_in_" . DB_NAME . " like '".$prefix."%'";
+               foreach( $saveAsEmptyWbceTables as $tabpattern) {
+                       $query2 .= " and tables_in_" . DB_NAME . " like '%" . $tabpattern . "%'";
+               }
+
+               $result = $database->query($query2);
+               if ($database->is_error()) {
+                       die(json_encode(array('code' => 4039, 'error' => $database->get_error())));
+               }
+
+               $tables_to_save_without_content = array();
+               while ($row = $result->fetchRow()) {
+                       $tables_to_save_without_content[] = $row[0];
+               }
+
+               $log->write('The contents of the following tables are *not dumped* into the SQL export: '.implode(", ",$tables_to_save_without_content).PHP_EOL);
+       }
+
+} elseif ($_GET['type'] == 'page') {
 
        foreach( $exportTables as &$tab) {
                $tab = TABLE_PREFIX.$tab;
        }
-       $log->write('Only these tables are included in the SQL export: '.implode(", ",$exportTables));
+       $log->write('Only these tables are included in the SQL export: '.implode(", ",$exportTables).PHP_EOL);
+
 }
 
 $result = $database->query($query);
@@ -331,6 +357,12 @@ while ($row = $result->fetchRow()) {
        $out = $query2->fetchRow();
 
        $sql_backup .= $out['Create Table'].";".PHP_EOL.PHP_EOL;
+
+       if (in_array($row[0], $tables_to_save_without_content)) {
+               $output .= $sql_backup.PHP_EOL.PHP_EOL;
+               continue;
+       }
+
        $sql_backup .= "# Dump data for ".$row[0].PHP_EOL;
 
        /**
diff --git a/info.php b/info.php
index 3b37351..a6cbf9f 100644
--- a/info.php
+++ b/info.php
@@ -13,7 +13,7 @@
 $module_directory = 'backup_plus';
 $module_name = 'Backup Plus';
 $module_function = 'tool';
-$module_version = '2.8.2';
+$module_version = '2.8.3';
 $module_platform = '1.5.x';
 $module_author = 'misc., Ruud, webbird, freesbee, mastermind, chriz';
 $module_license = 'GNU General Public License';
@@ -54,5 +54,7 @@ $module_icon = 'fa fa-download';
  *          turn off foreign key check in SQL file during restore
  *          create backups directory on install and every call of Backup Plus to have it existing for sure
  *
+ * 2.8.3    (by chriz) new config value saveAsEmptyWbceTables to exclude table contents from backup for given tables
+ *
  */

Ich habe diese Version vorab einfach mal 2.8.3 genannt und in mein Repo hochgeladen:  https://github.com/gchriz/wbce-backup-plus

Wer sich traut, das zu testen, kann gerne loslegen!   angel

Offline

#144 11.11.2024 06:47:34

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Mein Ansatz in #143 mit dem inneren DB-Query ist irgendwie unnötig kompliziert. facepalm
Ich würde es lieber mit einer Regular Expression lösen, muss mir das aber erst noch einmal genau anschauen.
Melde mich wieder...

Last edited by chriz (11.11.2024 06:48:04)

Offline

#145 11.11.2024 09:14:31

chriz
Member

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

So, ohne den zusätzlichen DB-Query sieht das schon übersichtlicher aus!
backup_settings.default.php und info.php bleiben gegenüber der gestrigen Version in #143 unverändert.

Der diff ist wieder auf Basis von 2.8.2.

diff --git a/backup.php b/backup.php
index d8b8895..88a8697 100644
--- a/backup.php
+++ b/backup.php
@@ -275,24 +275,34 @@ $output .= PHP_EOL."SET FOREIGN_KEY_CHECKS=0;".PHP_EOL;
 
 /**
  *     Get table names
- *     Use this one for all tables in DB
- *
  */
+
+// Default: Save all tables with content.
+// Can optionally be configured differently for type "wbce" in config value $saveAsEmptyWbceTables
+$pattern_for_tables_without_content = "";
+
+// For type "full" and as basis for type "page"
 $query = "SHOW TABLES";
 
 if ($_GET['type'] == 'wbce') {
 
-       // get ONLY wbce tables
+       // get ONLY current wbce tables
        $prefix = str_replace('_', '\_', TABLE_PREFIX);
        $query = "SHOW TABLES LIKE '".$prefix."%'";
-}
 
-if ($_GET['type'] == 'page') {
+       // Build the optional regex pattern to identify tables that should be saved without contents
+       if (isset($saveAsEmptyWbceTables) && (count($saveAsEmptyWbceTables) > 0)) {
+               $pattern_for_tables_without_content = "/" . implode("|", $saveAsEmptyWbceTables) . "/i";
+               $log->write('Pattern for tables to save without content: "' . $pattern_for_tables_without_content . '"');
+       }
+
+} elseif ($_GET['type'] == 'page') {
 
        foreach( $exportTables as &$tab) {
                $tab = TABLE_PREFIX.$tab;
        }
-       $log->write('Only these tables are included in the SQL export: '.implode(", ",$exportTables));
+       $log->write('Only these tables are included in the SQL export: '.implode(", ",$exportTables).PHP_EOL);
+
 }
 
 $result = $database->query($query);
@@ -331,6 +341,17 @@ while ($row = $result->fetchRow()) {
        $out = $query2->fetchRow();
 
        $sql_backup .= $out['Create Table'].";".PHP_EOL.PHP_EOL;
+
+       if ($pattern_for_tables_without_content !== "") {
+               if (preg_match($pattern_for_tables_without_content, $row[0])) {
+                       $msg = 'Contents are not dumped for: ' . $row[0];
+                       $log->write($msg);
+                       $output .= $sql_backup;
+                       $output .= '# ' . $msg .PHP_EOL.PHP_EOL.PHP_EOL;
+                       continue;
+               }
+       }
+
        $sql_backup .= "# Dump data for ".$row[0].PHP_EOL;
 
        /**

Ist auch schon in mein Repo hochgeladen:  https://github.com/gchriz/wbce-backup-plus

Last edited by chriz (11.11.2024 09:14:50)

Offline

Liked by:

florian

#146 11.11.2024 17:20:48

florian
Administrator

Re: Modul "Backup Plus" bitte testen - Please try it: Modul "Backup Plus"

Top, funktioniert! Danke!


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Board footer

up