Ошибки WordPress при работе с MySql
Раздел(ы): MySQL, WordPress, Вебмастеру
Просмотры: 7590
Комментарии: 6
После неудачных экспериментов с базой данных (БД) я получил на блоге следующие ошибки:
- Невозможно создать публикацию любого типа (запись, страницу). При этом WordPress выдаёт сообщение: «Вы редактируете страницу, на которой отображаются свежие записи»;
- Невозможно добавить комментарий. WordPress сигнализирует об этом так: «Не удалось сохранить комментарий. Пожалуйста, повторите попытку позже».
Манипуляции с установкой/удалением плагинов и тем оформления желаемого результата не принесли. Так же не помогло и обновление самого WordPress. Вывод напрашивался сам собой: проблема кроется в базе данных.
Причина ошибок WordPress и MySQL
В моем случает, вышеописанные симптомы, вероятнее всего говорили об отсутствии автоинкремента и, возможно, первичных ключей у некоторых таблиц. Как известно WordPress перекладывает на БД задачу создания идентификаторов новых постов, комментариев, регистрируемых пользователей и т.д.. То есть при создании новой записи ее уникальный номер создается автоматически MySQL сервером, а не WordPress. WordPress же работает с базой данных на условиях, что все записи имеют уникальные номера.
Ошибка создания новых записей в WordPress
Если у таблицы wp-posts отсутствует автоинкремент, то при попытке создать новую запись вы увидите примерно следующую картину:
При этом в таблице wp_posts создаётся запись с нулевым идентификатором и значениями по умолчанию в остальных полях. Статус таких постов — черновик, в списке постов они не отображаются.
Посты с нулевыми идентификаторами можно удалить без каких-либо опасений.
Ошибка добавления комментариев в WordPress
Если у таблицы wp-comments отсутствует автоинкремент, то при попытке создать комментарий вы как администратор получите следующее уведомление:
Либо, если комментарий оставляет обычный пользователей, то сообщение может быть несколько иным:
При этом в таблице wp_comments создаётся запись с нулевым идентификатором и значениями по умолчанию в остальных полях. В списке комментариев они, как правило, не отображаются. Посещение записи блога с таким комментарием может приводить к 500-ошибке веб-сервера.
Как исправить ошибку MySQL отсутствие автоинкремента
Для выполнения процедуры лечения воспользуемся популярной утилитой phpmyadmin, которая у большинства хостингов доступна по адресу http://mydomain.tld/phpmyadmin. Где mydomain.tld — адрес вашего сайта. Для доступа к базе данных вам необходимы имя пользователя базы данных и его пароль доступа.
Перед выполнением описываемых ниже действий с базой данных не забудьте сделать резервную копию. Дальнейшее изложение предполагает, что таблицы базы данных используют префикс по-умолчанию wp_
Проверка таблиц базы данных
Для проверки корректности таблиц воспользуемся командой DESCRIBE:
Например проверим таблицу wp_comments командой:
DESCRIBE wp_comments;
И в результате ее работы получим следующую информацию (пример для исправной таблицы):
Если у вас в колонке Extra отсутствует значение auto_increment для поля comment_ID, то необходимо выполнить следующую команду:
ALTER TABLE wp_comments CHANGE comment_ID `comment_ID` bigint(20) unsigned NOT AUTO_INCREMENT;
Если отсутствует Перви́чный ключ PRI, то необходимо выполнить следующее:
ALTER TABLE wp_comments CHANGE comment_ID `comment_ID` bigint(20) unsigned NOT PRIMARY KEY;
Если отсутствуют оба значения, то воспользуйтесь командой ниже:
ALTER TABLE wp_comments CHANGE comment_ID `comment_ID` bigint(20) unsigned NOT AUTO_INCREMENT PRIMARY KEY;
Похожие действия по диагностике и лечению нужно провести для таблиц wp_posts (поле ID), wp_users (поле ID), wp_postmeta, wp_usermeta и wp_commentmeta (поле meta_id).
Удаление записей с нулевым идентификатором
Для таблицы wp_posts делаем так:
DELETE FROM wp_posts WHERE ID = 0;
Аналогично для комментариев:
DELETE FROM wp_comments WHERE comment_ID = 0;
Если постов и комментариев с нулевым идентификатором не много, то их можно удалить вручную в phpmyadmin.
Список использованных источников
При написании статьи были использованы следующие ресурсы:
Привет. У меня не добавляются новые категории и меню, вот что выдает дескрайб:
term_id bigint(20) unsigned NO _ NULL _
Вместо пустоты — _
Эти команды не срабатывает:
ALTER TABLE wp_comments CHANGE term_id ‘term_id’ bigint(20) unsigned NO NULL AUTO_INCREMENT;
ALTER TABLE wp_comments CHANGE term_id ‘term_id’ bigint(20) unsigned NO AUTO_INCREMENT;
Помогите!
То есть не срабатывает:
ALTER TABLE wp_terms CHANGE term_id ‘term_id’ bigint(20) unsigned NO NULL AUTO_INCREMENT;
Посты таким образом где-то недельку назад исправил, а меню не могу. Пришла идея скачать дамп таблицы и там вписать автоинкремент, сейчас попробую…
Да, получилось редактируя дамп исправить ситуацию, просмотрел все таблицы, взял пример из wp_options и все заработало, правда пришлось еще одну таблицу также восстанавливать — wp_term_taxonomy.
Ильдар, спасибо за исследования и комментарий. На момент написания статьи все работало, но я решил проверить ваши замечания и убедился в правоте ваших слов. Действительно с некоторыми таблицами команды не проходят из-за ошибок. Но что самое интересное в этих таблицах автоинкремент успешно добавляется через GUI PhpMyAdmin. Предполагаю, что исправлять таблицы можно только на неработающем сайте. Как рекомендовано здесь http://got-quadrat.ru/blog/vosstanovlenie-klyuchej-v-tablitsah-wordpress/
Здравствуйте! У меня выскакивает ошибка «Вы редактируете страницу, на которой отображаются свежие записи.» только при добавлении страниц. При добавлении записи такого нет. В БД все проверил, там все ок. В чем может быть причина?
Перед появлением данной ошибки я создал отдельный шаблон для страницы WP в отдельном php-файле, но забыл задать ему имя, залил на FTP, и попытался создать страницу. После удаления данного файла-шаблона ошибка осталась…
Супер, проблема была в автоинкременте ID поста.