MySQL: Comment vérifier l'intégrité des tables
La commande CHECK TABLE permet de vérifier qu'une table n'est pas détériorée, mais comment tester toutes les tables de la base de donnée?
Le script PHP que nous fournissons permet de le faire, il fonctionne directement sur Wordpress, phpBB et fluxBB et peut être modifié pour d'autres CMS.
Il charge le fichier de configuration du CMS pour obtenir les variables d'accès à la base de données, mais différents CMS utilisent différents noms de variables et donc ces noms doivent être assignés aux noms par défaut du script, pour les CMS autres que Wordpress etc...
Comment le script fonctionne
Le script récupère la liste des tables avec la commande SQL SHOW TABLES:
$hndtable = mysql_query("SHOW TABLES")
Pour chaque table il applique la commande CHECK TABLE:
$status = mysqli_query($link, "CHECK TABLE `$tname` EXTENDED")
Il récupère les données de résultat et les affiche:
while($messages = mysqli_fetch_assoc($status))
{
...
echo $messages['status'];
...
}
L'algorithme complet:
$flag = true;
while(list($tname) = mysql_fetch_row($hndtable))
{
echo "Checking $tname : ";
$status = mysqli_query($link, "CHECK TABLE `$tname` EXTENDED");
if (!$status || mysqli_num_rows($status) <= 0)
{
echo "Can not get status for table $tname.<br>";
$flag = false;
continue;
}
while($messages = mysqli_fetch_assoc($status))
{
$r = $messages['Msg_text'];
echo $messages['status']." ".$messages['Msg_type']." $r<br>";
if($r != "OK") $flag = false;
}
}
Code qui est complété par les commandes d'accès à la base, que l'on trouvera dans le source à télécharger...
Exception
Certaines tables comme online sur fluxBB produisent la note suivante:
The storage engine for the table doesn't support check
Parce que c'est une table de type MEMORY ou autre raison. Ce n'est pas le fait d'une détérioration de la table.
Télécharger le script
Pour l'utiliser, téléchargez le à la racine du CMS, par exemple dans /forum/ s'il s'agit d'un forum, et taper le nom du fichier dans la barre d'URL du navigateur, exemple:
http://www.example.com/forum/check.php
Supprimez ensuite le script sur le site.