Tabellen nach Reboot automatisch reparieren?

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Tabellen nach Reboot automatisch reparieren?

Beitrag von Holger »

Hallo,

nach einem Reboot kommt es häufig vor, dass Tabellen in der DB "in Benutzung" sind.
Mit einem Repair ist der Fehler dann behoben.

Könnte man eigentlich ein Skript laufen lassen. das einmal ein Repair auf allen Tabellen ausführt?
Hintergrund ist der, dass mein Vater den Server oft spät Nachts neu starten muss. Dann bin ich erst morgens verfügbar um die Tabellen zu reparieren.
Ich würde ihm gerne einfach einen Link geben, den er nach einen Reboot aufruft.

Gruss
Holger
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Er muss nur in phpmyadmin die Datenbankübersicht wählen, alle Tabellen markieren (geht ja dort mit einem Link unterhalb der Tabellenliste) und "Tabellen reparieren" im DropDown auswählen.
Ist das zu schwer für Deinen Vater?
Ansonsten müsste man ein Script erstellen, daß alle Tabellennamen beinhaltet, um sie zu reparieren, denn für alle Tabellen gleichzeitig kennt MySQL nun einmal keinen Befehl...
Und dabei nicht mit "REPAIR DATABASE" verwechseln, das behebt ganz andere Fehler!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Ich kann definitiv meinen Vater nicht über Plesk in die Datenbank jagen ... er ist 71. Zwar ist er sehr fit was Internet und Software angeht, aber das will ich ihm nicht antun!
Das Rebooten klappt sehr gut, aber das geht ja über PowerPanel und PremiumReboot recht einfach.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Wenn Du den DB Maintenance MOD hast, kann er das doch auch darüber machen.
Vorausgesetzt, alle Tabellen sind in der betreffenden Functions-Datei eingetragen.
Wobei dann allerdings auch nur die phpBB-Tabellen geprüft werden können.
Oder man schafft wirklich ein neues Script dafür...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Es reicht, wenn die phpBB-Tabellen geprüft werden.
Wie würde denn das Skelett von so einem Skript aussehen?
Füllen mit den phpBB-Tabellen kann ich machen.

DB-Maintenance Mod habe ich installiert.
Das Problem ist aber, dass das Forum ja nicht erreichbar ist.
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

DB-Maintenance Mod habe ich installiert.
Das Problem ist aber, dass das Forum ja nicht erreichbar ist.
Aber nach dem Serverneustart doch schon, oder?

Öhm, ja, das Skelett müsste ich erst einmal basteln.
Das ist nicht mal soeben gemacht.
Soll ich und Dir in Rechnung stellen?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Hm, erstmal muss ich sehen, ob ich nach dem Serverneustart in das ACP reinkomme.
Ich glaube nicht.
Wenn sich z.B. die UPI2DB-Tabelle verabschiedet hat und ich eine Fehlermeldung bekomme. Komme ich dann ins ACP?
Hmmm ... muss ich erstmal untersuchen ...

Edit: habsch ein bissel gegoogelt:

Code: Alles auswählen

<?
### Enter your username and password into the connection string: ###
$dbLink = mysql_connect("localhost", "username", "password") or die("Unable to connect to the database.");

$sql = "show databases";
$query = mysql_query($sql) or die("error fetching database names");

while ($rs=mysql_fetch_array($query)) {

//echo "Database: " . $rs['Database'] . "\n";

mysql_select_db($rs['Database'],$dbLink) or die("Unable to select database: " . $rs['Database']);

$sql = "show tables";
$query2 = mysql_query($sql) or die("error fetching table names");

while ($rs2=mysql_fetch_array($query2)) {
$key = "Tables_in_" . $rs['Database'];
//echo "Table: " . $rs2[$key] . "\n";

$sql = "repair table " . $rs2[$key];
$query3 = mysql_query($sql) or die("Error repairing a table - $sql");
$rs3 = mysql_fetch_array($query3);
echo $rs3['Table'] . " | " . $rs3['Op'] . " | " . $rs3['Msg_type'] . " | " . $rs3['Msg_text'] . "\n";

}

}

echo "Finished!\n";

?>
Wäre das was?
Zuletzt geändert von Holger am Do 27.Mär, 2008 11:34, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ja, das wäre was, um die Datenbanktabellen zu reparieren.
Könnte man als PHP-Script auch ausführen, sobald der Webserver (Apache) wieder erreichbar ist.
Am besten in den Foren-Root legen und im Browser als Lesezeichen verlinken, dann kann man es am schnellsten ausführen.
Und wenn das jemand anderes aufruft, ist es ja auch nicht tragisch, da ja keine Daten kaputt gemacht werden können.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Naja, man kan der Datei ja einen kryptischen Namen geben ...
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Oder so...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Wenn ich das Skript ausführe, bekomme ich:
Error repairing a table - repair table CHARACTER_SETS
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann ist die Tabelle definitiv defekt.
Du solltest mal ein Backup von der Tabelle machen, sofern noch möglich, und diese dann nach dem Löschen komplett neu erstellen.
Hilft in den meisten Fällen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Hä? Das ist eine Tabelle in der DB?
Gibt es versteckte Tabellen?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Error repairing a table - repair table CHARACTER_SETS
Nach dem sollte es eine Tabelle sein...
Vielleicht eine Tabelle in der allgemeinen Verwaltungs-DB, die jeder MySQL-Server verwaltet ;)

Also in der Datenbank "INFORMATION_SCHEMA"!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Ja, das kann sein ... ich werde ja nicht vom Skript gefragt, WELCHE Tabelle ich optimieren möchte ... der optimiert alles, was mit dem Account optimiert werden kann ...
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Die Fehlermeldung kannst Du dann auch einfach ignorieren, da diese Tabellen in der Regel gesperrt sind für den "normalen" DB-User.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Ich glaube aber, dass das skript dann stoppt, oder?
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nein, so ist es nicht ausgelegt.
Der Fehler wird nur angezeigt, es wird dann nicht angehalten.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Alles klar, dann ignoriere ich das!



Hi, leider scheint er doch zu stoppen. ^5
Habe einen Repair ausgeführt, nichts ist passiert ...
Zuletzt geändert von Holger am So 27.Apr, 2008 15:06, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Es wird NICHT gestoppt, sondern NUR informiert und dann zur nächsten Tabelle gegangen!
Bitte bedenke hierbei, daß grundsätzliche Schäden an den Tabellendateien nicht immer durch ein einfaches REPAIR TABLE erfolgreich behoben werden können.
Wenn eine Tabelle sich weigert, repariert werden zu können, sollte man diese schnellstens sichern, löschen und neu erstellen.
Ist dann der einzigste Weg, um Datenverlusten vorzubeugen!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Beitrag von Holger »

Also ...
Ich musst den Server neu starten ... danach war eine Tabelle "in Benutzung". Mit einem Repair-Befehl in phpmyadmin kann ich das beheben.
Zuvor habe ich jedoch das repair-Skript getestet. Hat nicht geklappt.
Habe mal die Zeilen aktiviert, die ausgeblendet sind im Skript.
Da habe ich gesehen, dass er sofort stoppt.
CHARACTER_SETS ist die erste Tabelle in der ersten DB die das Skript sich vornimmt.

Mehr wird dann nicht aufgelistet ...
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ach ja, hier:

Code: Alles auswählen

$query3 = mysql_query($sql) or die("Error repairing a table - $sql");
Ersetze diese Zeile mal mit einer einfachen

Code: Alles auswählen

$query3 = mysql_query($sql);
Klar, sofern das Script in irgend einer Weise hierbei dann auf einen SQL-Fehler stösst (Rechte, falsches Statement, etc.), kommt ein Fehler zurück und das Script bricht ab.
Ich hatte bislang nur auf die Behandlung durch echo und den nachfolgenden Zeilen geschaut, nicht aber auf das die... :!:
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten