MySQL: Как проверить целостность таблиц
Команда CHECK TABLE позволяет проверить, что таблица не повреждена, но как проверить все таблицы в базе данных?
Предоставленный нами PHP-скрипт позволяет сделать это, он работает непосредственно на Wordpress, phpBB и flowBB и может быть изменен для других CMS.
Он загружает файл конфигурации CMS для получения переменных доступа к базе данных, но разные CMS используют разные имена переменных, и поэтому эти имена должны быть назначены именам по умолчанию сценария, для CMS, отличных от Wordpress и т. д.
Как работает скрипт
Сценарий извлекает список таблиц с помощью команды SQL SHOW TABLES:
$hndtable = mysql_query("SHOW TABLES")
Для каждой таблицы применяется команда CHECK TABLE:
$status = mysqli_query($link, "CHECK TABLE `$tname` EXTENDED")
Он извлекает данные результатов и отображает их:
while($messages = mysqli_fetch_assoc($status))
{
...
echo $messages['status'];
...
}
Полный алгоритм:
$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;
}
}
Код, который дополняется командами доступа к базе, которые можно найти в исходнике для скачивания...
Исключение
Некоторые таблицы, такие как онлайн в flowBB, дают следующую заметку:
The storage engine for the table doesn't support check
Потому что это таблица типа MEMORY или другая причина. Это не факт ухудшения состояния стола.
Загрузить сценарий
Чтобы использовать его, загрузите его в корень CMS, например, в/forum/, если это форум, и введите имя файла в URL-строку браузера, например:
http://www.example.com/forum/check.php
Затем удалите сценарий на сайте.