Seite 1 von 1

MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 29.04.2019, 13:10
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) 1119 mal betrachtet
tabellendetail.jpg
tabellendetail.jpg (7.29 KiB) 1119 mal betrachtet

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 30.04.2019, 01:13
von r23
Frage: Wie wird der Export aufgerufen? Über "SHOW TABLE STATUS..."
Die Abfrage erfolgt über SHOW TABLE STATUS FROM `...
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);

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 30.04.2019, 11:20
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.

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 30.04.2019, 22:10
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.

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 01.05.2019, 23:42
von r23
Ich habe den Dumper etwas angepasst und die Fehler sind behoben.
Danke!
Kann falls gewünscht noch den kompletten Code anhängen.
Ja bitte - einfach senden info@r23.de oder info@oos-shop.de

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 02.05.2019, 15:54
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

Re: MSD Backup bei Tabellen mit einem Eintrag geht nicht

Verfasst: 02.05.2019, 16:56
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