Nach einem Datenbank Crash fix alle mysql DBs/Tabellen reparieren

Es kann schon mal vorkommen, dass nach einem Reboot oder Hard-Reset eines Servers der mysql-Server meldet, dass einige Tabellen defekt sind. Die Datenbank startet dann zwar ganz normal, einige Queries auf defekte/korrupte Tabellen können dann jedoch nicht mehr ausgeführt werden.

Um diese defekten Tabellen zu reparieren, kann man z.B. myisamchk mit den Optionen -rf im Datenverzeichnis von mySQL (unter Debian /var/lib/mysql) die Datenbanken reparieren. Alternativ kann man dies jedoch auch direkt mit mySQL erledigen, der Syntax lautet dann REPAIR TABLE <tabellenname>.

Dies jedoch manuell über alle Tabellen auszuführen, ist lästig, weshalb ich hier einen Code-Schnipsel bereitstelle, der alle Tabellen in allen Datenbanken repariert – dies funktioniert jedoch nur mit der Datenbank Engine MYISAM:

<?php

$db=mysql_connect(“localhost”,”root”,”<passwort>”);

$sql = “show databases;”;

$res_db = mysql_query($sql,$db);

while ($dat_db = mysql_fetch_array($res_db)) {

$datab = $dat_db[“Database”];

mysql_select_db($datab,$db);

$sql = “show tables;”;

$res = mysql_query($sql,$db);

while ($dat = mysql_fetch_array($res)) {

$table = $dat[0];

$sql2 = “repair table $table”;

$res2 = mysql_query($sql2,$db);

}

}

?>

Man kann dieses Script speichern, die Modes auf executable setzen und es am Ende in /etc/init.d/mysql anfügen, damit die Tabellen automatisch nach jedem Start von mysql repariert werden.

2 thoughts on “Nach einem Datenbank Crash fix alle mysql DBs/Tabellen reparieren

  1. Wäre es nicht besser dieses hier auszuführen?

    mysqlcheck -u root -p$dbpassword –all-databases –optimize –auto-repair –silent

    Bin mir nicht ganz sicher …

    lga

Comments are closed.