L
Lukasz
Script optimieren Datenbanken automatisch repairieren
Hallo
ich habe folgenden Script, welchen ich jetzt noch optimieren möchte! Der Script macht keinerlei Probleme, aber ich möchte das ganze in eine Schleife setzen, und mindestens 5 mal durchlaufen lassen -> Siehe //## Prozess wiederholen, falls noch fehler autacuhen. Das ganze in eine Schleife zu setzten ist zwar kein Problem, aber wie könnte ich leistungstechnisch alle Felder abfragen, ob irgend ein warning oder fehler vorhanden ist?
Datenbanken automatisch reparieren und optimieren
Danke!
PS Ich möchte einfach den Script solange ausführen, bis endweder keine Fehler mehr autauchen, oder aber der Script 5 mal abgearbeitet worden ist. Aber ich möchte auf Grund des Benchmarks in einer einzigen abfrage checken ob über haupt ein Fehler vorhanden ist, bevor die Schleife weitergeführt wird.
Hier noch interne Funktionen:
Gruss!
Hallo
ich habe folgenden Script, welchen ich jetzt noch optimieren möchte! Der Script macht keinerlei Probleme, aber ich möchte das ganze in eine Schleife setzen, und mindestens 5 mal durchlaufen lassen -> Siehe //## Prozess wiederholen, falls noch fehler autacuhen. Das ganze in eine Schleife zu setzten ist zwar kein Problem, aber wie könnte ich leistungstechnisch alle Felder abfragen, ob irgend ein warning oder fehler vorhanden ist?
Datenbanken automatisch reparieren und optimieren
PHP:
<?
//## Variablen
$fehler = 0;
$nofehler = 0;
$ges = 0;
//## ignore_user_abort() senden, damit Script automatisch abgearbeitet wird ##
ignore_user_abort();
//## Alle Tabellen aus der Datenbank auslesen und im String vermerken: ##
global $lgckit_mysqldb;
$result = mysql_list_tables($lgckit_mysqldb);
while($row = mysql_fetch_array($result)){
$tables .= $row['0'].", ";
}
//## SQL FEHLER :extended check error Table 'lgckit.extended' doesn't exist##
//## Verhindern, das letzte komma (,) entfernen ##
for($i=0;$i<strlen($tables)-2;$i++){
$alltables .= $tables["$i"];
}
unset($tables,$result);
//## Tabellen pruefen bei 100% Datensaetze u. voller Indzies ##
//#INFO# Mysql liefert 4 assoc Werte: Table - Op - Msg_type - Msg_text ##
//#INFO# Msg-text liefert 'OK' sofern Msg-type nicht 'warning'oder 'error' beinhaltet.##
//#INFO# wird einer dieser Werte geliefert, bleibt Msg_text leer##
//#INFO# anders herum liefert Msg_type den Wert 'status' sofern Msg_text 'OK' zurueck gibt##
//## liefert Msg_type 'error' wird die DB nur rpairiert + A##
//## liefert Msg_type 'warning' wird nur optimiert + B##
$result = @mysql_query("CHECK TABLE ".$alltables." EXTENDED");
while($row = @mysql_fetch_array($result)){
if ($row['Msg_type'] == "error") { @mysql_query("REPAIR TABLE ".ereg_replace("$lgckit_mysqldb\.","",$row["Table"])." EXTENDED"); $fehler++; }
elseif ($row['Msg_type'] == "warning") { @mysql_query("OPTIMIZE TABLE ".ereg_replace("$lgckit_mysqldb\.","",$row["Table"]).""); $fehler++; }
$ges ++;
}
//## Prozess wiederholen und Ergebnise ausgeben ##
$result = @mysql_query("CHECK TABLE ".$alltables." EXTENDED");
while($row = @mysql_fetch_array($result)){
if ($row['Msg_type'] == "error") { echo ereg_replace("$lgckit_mysqldb\.","",$row["Table"])." Fehler<br>"; }
elseif ($row['Msg_type'] == "warning") { echo ereg_replace("$lgckit_mysqldb\.","",$row["Table"])." Warnung<br>"; }
elseif ($row['Msg_type'] == "status" or $row['Msg_text'] == "OK") { echo ereg_replace("$lgckit_mysqldb\.","",$row["Table"])." OK<br>"; $nofehler++; }
}
echo $fehler." Fehler gefunden, davon ".($ges - $nofehler)." behoben";
//## Eintrag in die Mysql-Datenbank letzter optimierungszeitpunkt ##
@mysql_query("UPDATE lgckit_settings SET settings_lastdbotimizetime = '".sqldatetime(time())."' LIMIT 1");
?>
Danke!
PS Ich möchte einfach den Script solange ausführen, bis endweder keine Fehler mehr autauchen, oder aber der Script 5 mal abgearbeitet worden ist. Aber ich möchte auf Grund des Benchmarks in einer einzigen abfrage checken ob über haupt ein Fehler vorhanden ist, bevor die Schleife weitergeführt wird.
Hier noch interne Funktionen:
PHP:
//## Rechnet timsestamp in MYSQL DATE-TIME um ##
if (!function_exists("sqldatetime")) {
function sqldatetime($datum)
{
$stream .=strftime("%Y",$datum)."-";
$stream .=strftime("%m",$datum)."-";
$stream .=strftime("%d",$datum)." ";
$stream .=strftime("%H",$datum).":";
$stream .=strftime("%M",$datum).":";
$stream .=strftime("%S",$datum);
return $stream;
}
}
Gruss!
Zuletzt bearbeitet von einem Moderator: