Backups von Datenbanken

Dieses Thema im Forum "Entwicklerforum" wurde erstellt von ramsys, 3. März 2014.

  1. ramsys

    ramsys Member

    Hallo Till,

    wenn ich mich richtig erinnere gab es ein Problem beim Backup, wenn Webserver und Datenbankserver auf verschiedenen Servern installiert sind (Multiserver-Setup).

    Ist das in 3.0.5.4 behoben? Im Bugtracker konnte ich dazu nichts finden. In der aktuellen 3.0.5.4-dev werden keine Backups der Datenbanken angelegt.
     
  2. ramsys

    ramsys Member

    Okay, das hat mich gerade nicht in Ruhe gelassen :)

    Die DB-Backups können auch nicht erstellt werden, da in der Tabelle web_database die Spalte backup_interval den Wert "0" hat. In der Datei database_edit.php wird der entsprechende Wert aus der Tabelle web_domain geholt. Die Tabelle web_domain hat aber gar keine Einträge, da die Webseiten ja auf einem anderen Server liegen.

    Auszug database_edit.php:

    PHP:
    $web $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->dataRecord["parent_domain_id"]));

    $backup_interval $app->functions->intval($web['backup_interval']);

    $sql "UPDATE web_database SET sys_groupid = '$sys_groupid', backup_interval = '$backup_interval', backup_copies = '$backup_copies' WHERE database_id = ".$this->id;
    Bug oder Gedankenfehler bei mir?
     
  3. florian030

    florian030 Member

    Ich habe mir eben das aktuelle stable-version aus dem git installiert und habe kein Problem mit den Backups feststellen können.

    Mal davon abgesehen, dass ich deine Beispiel-Zeilen nicht wirklich finden konnte.

    Hast Du dieses Problem, wenn DB und WEB auf verschiedenen Servern liegen oder immer?
     
  4. ramsys

    ramsys Member

    Das kann ja auch nicht funktionieren, da der Wert in der web_
    PHP:
    domain ein String ist (none, daily) und in der web_database Integer (0). Durch die Umwandlung steht dann in der web_database immer 0.

    Das wurde erst in 7c19f2dbb4608ef6b3f219d45490b25aa05e848c vor zwei Tagen behoben. Deshalb funktioniert es jetzt bei Dir :)

    Ich werde den aktuellen Commit nachher mal installieren und hier berichten, wie es sich dann bei getrennten Servern verhält.

    @florian030 Danke für Test ;)
     
  5. ramsys

    ramsys Member

    Der Bug wurde von Falko im Git behoben. Nach dem Update werden nun in beiden Tabellen (web_domain, web_database) die Werte korrekt als string eingetragen (none, daily). Auch bei getrennten Servern von Web und Datenbank!

    Es war nur notwendig, bei allen betroffenen Webseiten den Datensatz manuell zu aktualisieren. Ich werde den Durchlauf heute Nacht abwarten und sehen, ob dann alle Daten wie gewünscht im Backup-Verzeichnis liegen.
     
  6. ramsys

    ramsys Member

  7. ramsys

    ramsys Member

    BTW Kann man eigentlich, um z.B. das Backup vorzeitig zu simulieren, die cron_daily.sh manuell aufrufen? Oder kommen dann die anderen Funktionen und vor allem die Statistiken durcheinander?
     
  8. Till

    Till Administrator

    Das würde die Statistiken durcheinander bringen, also nichts für ein Produktivsystem.
     
  9. ramsys

    ramsys Member

    Danke, das habe ich mir fast schon so gedacht :)
     
  10. florian030

    florian030 Member

    Du könntest bestenfalls eine zweite cron_daily.sh anlegen, die eine zweiter cron_daily.php aufruft. In dieser nimmst Du dann Statistiken, Log-Handling und das Quota-Handling raus.
     
  11. ramsys

    ramsys Member

    Gute Idee, lohnt sich aber wahrscheinlich nicht da ich davon ausgehe, dass jetzt alles reibungslos funktioniert. Ich werde einfach noch ein paar Stunden warten und mich inzwischen mit dem Rechnungsmodul weiter beschäftigen :)
     
  12. ramsys

    ramsys Member

    Hier das Ergebnis:

    Wenn Webserver und Datenbankserver auf getrennten Servern liegen, werden nur die Webseiten beim Backup berücksichtigt, keine Datenbanken.

    Auf dem Webserver hat die Tabelle "web_domain" den korrekten Eintrag für "backup_interval" und auf dem Datenbankserver die Tabelle "web_database".
     
  13. florian030

    florian030 Member

    Die Backups für die Datenbanken sollten dann doch aber auf dem DB-Server erstellt werden?
     
  14. ramsys

    ramsys Member

    Danke, dort hatte ich gerade überhaupt nicht nachgesehen, nur im Interface. Die Backups der Datenbanken liegen tatsächlich auf dem Server.

    Dann fehlt nur noch die Anzeige der Datenbank-Backups im Interface, sowie die Möglichkeit des Downloads und des Restore.
     
  15. florian030

    florian030 Member

    Stehen die Backups denn in der Tabelle web_backup auf dem Server auf dem das Interface läuft oder nur auf dem DB-Server?

    Die Backup-Listen werden nämlich durch SELECT * FROM web_backup WHERE parent_domain_id = eingelesen.
     
  16. ramsys

    ramsys Member

    Auf dem Webserver stehen in der Tabelle web_backup alle Backups vom backup_type "web" und auf dem Datenbankserver alle Backups vom backup_type "mysql".

    Auf dem Server des Interface sind in der Tabelle web_backup beide Backups vorhanden (web und mysql), mit der jeweils korrekten server_id.

    Bei einem "SELECT * FROM web_backup WHERE parent_domain_id = xx" auf dem Server des Interface würden also 2 Datensätze gefunden werden, auf dem Webserver nur einer.

    Dabei ist mir noch aufgefallen, dass "filesize" in der Tabelle web_backup immer leer ist.
     
  17. florian030

    florian030 Member

    Für die Ausgabe entscheidend ist die Datenbank, die auf dem Server mit dem Interface verwendet wird.

    Dass filesize in der Tabelle leer ist, ist schon richtig. Die Anzeige der Größen der Backups ist nur per Patch oder mit master-git möglich. Letzteres würde ich aber nicht produktiv einsetzen.
     
  18. ramsys

    ramsys Member

    Und dort befinden sich jeweils 2 Datensätze (web und mysql) unter der gleichen parent_domain_id und unterschiedlicher server_id. Nur wird im Interface lediglich der Datensatz "web" angezeigt.

    Im Gegensatz dazu befinden sich in dieser Tabelle auch jeweils 2 Datensätze (web und mysql) unter der gleichen parent_domain_id und gleicher server_id, wo also Webserver und Datenbankserver nicht getrennt sind. Hier werden im Interface korrekterweise beide Datensätze "web" und "mysql" angezeigt.
     
  19. ramsys

    ramsys Member

    WHERE parent_domain_id = xx AND server_id = xx

    interface/lib/classes/plugin_backuplist.inc.php:

    PHP:
            $web $app->db->queryOneRecord("SELECT server_id FROM web_domain WHERE domain_id = ".$app->functions->intval($this->form->id));
            
    $sql "SELECT * FROM web_backup WHERE parent_domain_id = ".$app->functions->intval($this->form->id)." AND server_id = ".$app->functions->intval($web['server_id'])." ORDER BY tstamp DESC, backup_type ASC";
            
    $records $app->db->queryAllRecords($sql);

            
    $bgcolor "#FFFFFF";
            if(
    is_array($records)) {
                foreach(
    $records as $rec) {

                    
    // Change of color
                    
    $bgcolor = ($bgcolor == "#FFFFFF")?"#EEEEEE":"#FFFFFF";
                    
    $rec["bgcolor"] = $bgcolor;

                    
    $rec['date'] = date($app->lng('conf_format_datetime'), $rec['tstamp']);
                    
    $rec['backup_type'] = $wb[('backup_type_'.$rec['backup_type'])];

                    
    $records_new[] = $rec;
                }
            }

            
    $listTpl->setLoop('records', @$records_new);
     
  20. florian030

    florian030 Member

    Das ist dann wohl ein Problem, wenn man eine dev-Version verwendet. ;)

    Nimm doch mal testweise
    Code:
    " AND server_id = ".$app->functions->intval($web['server_id']).
    raus.

    Das
     
    Zuletzt bearbeitet: 7. März 2014

Diese Seite empfehlen