2016-09-03 2 views
1

Я наблюдаю за базой данных для клиента, у которого их таблица wp_posts повреждена дважды за последнюю неделю. При попытке доступа к таблице с помощью PhpMyAdmin, я получаю следующее сообщение:Почему моя таблица базы данных повреждена?

В таблице wp_posts был отмечен как поврежденный и должен быть восстановлен.

Нет никаких указаний относительно того, как это произошло или что можно сделать, чтобы предотвратить его. Я был разработчиком в течение 8 лет и никогда не испытывал этого раньше, поэтому я в недоумении. Кто-нибудь испытывает эту проблему и как я могу справиться с ней, прежде чем это произойдет снова?

ответ

3

Сообщение об ошибке не имеет представления о том, как это произошло. Это может быть неисправный диск, незавершенная запись ввода-вывода, ошибка в коде MySQL, или кто-то мог открыть файл и нацарапать его с помощью редактора.

Что можно сделать, чтобы исправить это, следует использовать инструмент для ремонта таблицы myisamchk, который входит в состав MySQL. Как использовать этот инструмент здесь: https://dev.mysql.com/doc/refman/5.7/en/myisam-repair.html

Что можно сделать, чтобы предотвратить его? Прекратите использование механизма хранения MyISAM.

MyISAM когда-то считался более стабильным и более высокопроизводительным, но это было более 10 лет назад. С тех пор InnoDB получил все технические усовершенствования, он значительно выше по производительности, чем MyISAM, и это намного безопаснее с точки зрения саморемонта. Постепенно в каждом выпуске MySQL MyISAM устаревает.

Изменение механизма хранения так просто, как:

ALTER TABLE wp_posts ENGINE=InnoDB; 

Вы должны сделать это для каждой таблицы в базе данных, по одному за раз. Но вы можете создать набор команд для запуска:

SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS _sql 
FROM INFORMATION_SCHEMA.TABLES 
WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE'; 

перехватывать вывод этого запроса и выполнить заявления как сценарий SQL. В 99% случаев нет никакой пользы для использования MyISAM, если вы используете текущую версию MySQL (например, любую версию GA в ветке 5.5 или более поздней).

+0

Спасибо за подробное объяснение Билл! Когда я пытаюсь запустить средство mysiamchk, он говорит, что он не может создать новый tempfile. Затем я заметил, что 'wp_posts' говорит, что он используется (и это было похоже на весь день). Я нашел эту статью (https://portal.my-tss.com/knowledgebase/254/MySQL-Table-says-IN-USE-but-table-will-not-repair-in-phpmyadmin.html), которая описывает, как чтобы обойти это, но когда я пытаюсь использовать SSH в папке для моей БД, он говорит, что Permission denied. Моя техническая поддержка хостинг-провайдера не знает, почему у меня не будет разрешения на 'cd' в эту папку. Есть идеи? – zeckdude

+1

Для каталога данных MySQL не редкость иметь ограниченные разрешения. По умолчанию каталог доступен для пользователя mysql, или root, конечно. –

+0

Итак, если таблица 'wp_posts' застряла' в использовании', тогда нет способа восстановить эту таблицу? – zeckdude