MSD Backup bei Tabellen mit einem Eintrag geht nicht

MyOOS [Dumper]ist ein Sicherungsprogramm für MySQL-Datenbanken. Damit können Sicherungskopien der Daten (Forum, Shop, Blog, usw.) erstellt und bei Bedarf auch wieder hergestellt werden. Besonders bei Web-Space ohne Shell-Zugang bietet sich MyOOS [Dumper] als sinnvolle Alternative an.
Antworten
mybetanet
Beiträge: 4
Registriert: 29.04.2019, 09:50

MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von mybetanet »

Hallo Zusammen

Bin ganz neu im Forum und ich benutze den MyOOS Dumper für ein andere Projekt von mir. Beim Restore eines kleinen Backups habe ich nun festgestellt, dass bei allen Tabellen welche genau ein Eintrag haben, da Backup per PERL Cronjob Aufruf nicht funktioniert bzw. die Daten nicht exporiterit werden. Der Dump als ganzes funktioniert, nur fehlt der Eintrag im Backup File.
Wenn ich den Dumper als PHP Aufruf starte wird die komplette DB gesichert inkl. allen Tabellen welche nur einen Eintrag enthalten.

Beim SQL Browser Tab sehe ich eine Tabelle Config (Bilder im Anhang) bei welcher die "Rows" nach dem Aufruf auf 0 steht, der Auto Index Parameter jedoch auf 2. Durch den Aufruf der Details wird der Eintrag auch ersichtlich.

Soweit ich gesehen habe ist die vorhandene Maria DB als InnoDB vorhanden, gemäss dem Referenzhandbuch kann da der Row Wert bis zu 50% Abweichen.

Frage: Wie wird der Export aufgerufen? Über "SHOW TABLE STATUS..." und das Auslesen der Anz. Rows welche in einer Schleife danach die Daten exportiert?

Wenn ja würde dies den Effekt so erklären.

Besten Dank für die Hilfe.

Gruss Pascal
uebersicht.jpg
uebersicht.jpg (32.23 KiB) 12746 mal betrachtet
tabellendetail.jpg
tabellendetail.jpg (7.29 KiB) 12746 mal betrachtet
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von r23 »

mybetanet hat geschrieben: 29.04.2019, 13:10 Frage: Wie wird der Export aufgerufen? Über "SHOW TABLE STATUS..."
Die Abfrage erfolgt über SHOW TABLE STATUS FROM `...
mybetanet hat geschrieben: 29.04.2019, 13:10 und das Auslesen der Anz. Rows welche in einer Schleife danach die Daten exportiert?

Code: Alles auswählen

mysqli_data_seek($res,0);

Code: Alles auswählen

$data[0]=mysqli_fetch_array($res,MYSQLI_ASSOC);
mybetanet
Beiträge: 4
Registriert: 29.04.2019, 09:50

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von mybetanet »

Hallo

Besten Dank für die Rückmeldung, denke da liegt das Problem das nicht alles ausgelesen wird. Gemäss MySQL Referenz kann die Abweichung bei einer Inno DB gegen 40-50% bei der Anzahl der "Row" Einträgen sein.

Werde mir den Code mal anschauen ob dieser änderbar ist damit der Dumper auch mit der InnoDB Engine geht.
mybetanet
Beiträge: 4
Registriert: 29.04.2019, 09:50

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von mybetanet »

Ich habe den Dumper etwas angepasst und die Fehler sind behoben. Es werden nun alle Daten korrekt exportiert und ebefalls wieder importiret. Tests mit verschiedenen Datenbanken und Hosts haben alle funktioniert.

Folgendes wurde angepasst:
/***********************
Ergänzung www.betanet-web.ch - 30.04.2019
Datei: sql_dataview.php - Zeile 276
Anz. Einträge in der Tabelle wird in Ausgabe Array überschrieben, damit alle Daten exportiert werden.
************************/

$tabellenname = $data[0]['Name'];
$numrows12 = 0;
$select12 = "select id from $tabellenname";
$res12=MSD_query($select12);
$numrows12=@mysqli_num_rows($res12);
$temp[$i]['Rows'] = $numrows12;
/***********************
Ergänzung www.betanet-web.ch - 30.04.2019
Datei: crondump.pl - Zeile 485
Anz. Einträge wurde falsch zusammengerechnet.
************************/

#Alter Wert der nicht mehr stimmt
#$r+=$db_tables{$tablename}{Rows}; #calculate nr of records


#www.betanet-web.ch - 30.04.2019
#Erweitert mit SQL Abfrage für Ausgabe Anzahl der Einträge in der Tabelle (analog PHP)
$sql_create = "SELECT COUNT(id) FROM `$tablename`";
$sth = $dbh->prepare($sql_create);
if (!$sth)
{
err_trap("<font color=\"red\">Fatal error sending Query '".$sql_create."'! MySQL-Error: ".$DBI::errstr);
}

$sth->execute || err_trap("Couldn't execute ".$sql_create);
$rct = $sth->fetchrow;
$sth->finish;

$r+=$rct;
#Ende der Erweiterung

/***********************
Ergänzung www.betanet-web.ch - 30.04.2019
Datei: crondump.pl - Zeile 608 (Zeilenangabe nach der ersten Korrektur auf Zeile 485)
Anz. Einträge in der Tabelle wird in Ausgabe Array überschrieben, damit alle Daten exportiert werden.
************************/


# how many rows
#Dieser Wert wird falsch ausgelesen!!
#$rct=$db_tables{$tablename}{Rows};

#www.betanet-web.ch - 30.04.2019
#Erweitert mit SQL Abfrage für Ausgabe Anzahl der Einträge in der Tabelle (analog PHP)
$sql_create = "SELECT COUNT(*) FROM `$tablename`";
$sth = $dbh->prepare($sql_create);
if (!$sth)
{
err_trap("<font color=\"red\">Fatal error sending Query '".$sql_create."'! MySQL-Error: ".$DBI::errstr);
}

$sth->execute || err_trap("Couldn't execute ".$sql_create);
$rct = $sth->fetchrow;
$sth->finish;

#Ende der Erweiterung
Sorry für die Auflistung als Zitat, im Codeformat sind die Änderungen nicht lesbar. Kann falls gewünscht noch den kompletten Code anhängen.
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von r23 »

mybetanet hat geschrieben: 30.04.2019, 22:10 Ich habe den Dumper etwas angepasst und die Fehler sind behoben.
Danke!
mybetanet hat geschrieben: 30.04.2019, 22:10 Kann falls gewünscht noch den kompletten Code anhängen.
Ja bitte - einfach senden info@r23.de oder info@oos-shop.de
r23
Beiträge: 2625
Registriert: 18.09.2008, 05:56
Wohnort: Hagen
Kontaktdaten:

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von r23 »

Hallo,

herzlichen Dank für die Erweiterung und die Fehlerbeseitigung.

Ich habe die Mail's erhalten. Sorry, dass die Sicherheits-Einstellungen einen Streich gespielt haben. Aber der Download-Link funktionierte ja.


Die Änderungen habe ich in das Projekt aufgenommen
https://github.com/r23/MyOOS/commit/e21 ... c92d18775f

Da unsere Tabellen nicht immer das Datenfeld 'id' haben - erzeugten die Änderungen Hinweise
MySQL meldet:
Unknown column 'id' in 'field list'

Fehler bei der Anfrage:
select id from address_book
Ich habe

Code: Alles auswählen

$select12 = "select id from $tabellenname";
nach

Code: Alles auswählen

$select12 = "select * from $tabellenname";
geändert.

Am 06. Mai 2019 veröffentlichen wir die neue Dumper Version.

Vielen Dank für die Unterstützung!

Ralf
mybetanet
Beiträge: 4
Registriert: 29.04.2019, 09:50

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von mybetanet »

Hallo Ralf

Hab ich gern gemacht, ist ja auch in meinem Interesse das die Backups korrekt und ganz gemacht werden. :wink:

Und ja Du hast recht, das SQL Query im sql_dataview.php File war noch falsch, in der crondump.pl hatte ich es auf Grund des Fehlers geändert.

Gruss
Pascal
pixelfox
Beiträge: 1
Registriert: 12.10.2019, 01:44

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Beitrag von pixelfox »

Auch von mir ganz herzlichen Dank für den Bugfix! Ich verwende den MyOOSDumper schon länger für meine Projekte und hatte das selbe Problem, beim Backup mittels PERL-Script und Cronjob wurden nicht alle Einträge gesichert. Der Fehler bestand bereits beim alten MySQLDumper. Mit der neuen Dumper-Version 4.2.2 funktioniert jetzt alles perfekt.

Schöne Grüße
Antworten