Ошибки WordPress при работе с MySql

 26 июня 2016      
 MySQL / WordPress / Вебмастеру      
 комментариев 5      
 1817

После неудачных экспериментов с базой данных (БД) я получил на блоге следующие ошибки:

  • Невозможно создать публикацию любого типа (запись, страницу). При этом WordPress выдаёт сообщение: «Вы редактируете страницу, на которой отображаются свежие записи»;
  • Невозможно добавить комментарий. WordPress сигнализирует об этом так: «Не удалось сохранить комментарий. Пожалуйста, повторите попытку позже».

Манипуляции с установкой/удалением плагинов и тем оформления желаемого результата не принесли. Так же не помогло и обновление самого WordPress. Вывод напрашивался сам собой: проблема кроется в базе данных.

Причина ошибок WordPress и MySQL

В моем случает, вышеописанные симптомы, вероятнее всего говорили об отсутствии автоинкремента и, возможно, первичных ключей у некоторых таблиц. Как известно WordPress перекладывает на БД задачу создания идентификаторов новых постов, комментариев, регистрируемых пользователей и т.д.. То есть при создании новой записи ее уникальный номер создается автоматически MySQL сервером, а не WordPress. WordPress же работает с базой данных на условиях, что все записи имеют уникальные номера.

Ошибка создания новых записей в WordPress

Если у таблицы wp-posts отсутствует автоинкремент, то при попытке создать новую запись вы увидите примерно следующую картину:
Ошибка создания новых записей в WordPress
При этом в таблице wp_posts создаётся запись с нулевым идентификатором и значениями по умолчанию в остальных полях. Статус таких постов — черновик, в списке постов они не отображаются.

Посты с нулевыми идентификаторами можно удалить без каких-либо опасений.

Ошибка добавления комментариев в WordPress

Если у таблицы wp-comments отсутствует автоинкремент, то при попытке создать комментарий вы как администратор получите следующее уведомление:
wordpress-mysql-error_1
Либо, если комментарий оставляет обычный пользователей, то сообщение может быть несколько иным:
wordpress-mysql-error_2
При этом в таблице wp_comments создаётся запись с нулевым идентификатором и значениями по умолчанию в остальных полях. В списке комментариев они, как правило, не отображаются. Посещение записи блога с таким комментарием может приводить к 500-ошибке веб-сервера.

Читайте также:  Обзор VDS хостинга HostiServer.COM

Как исправить ошибку MySQL отсутствие автоинкремента

Для выполнения процедуры лечения воспользуемся популярной утилитой phpmyadmin, которая у большинства хостингов доступна по адресу http://mydomain.tld/phpmyadmin. Где mydomain.tld — адрес вашего сайта. Для доступа к базе данных вам необходимы имя пользователя базы данных и его пароль доступа.

Перед выполнением описываемых ниже действий с базой данных не забудьте сделать резервную копию. Дальнейшее изложение предполагает, что таблицы базы данных используют префикс по-умолчанию wp_

Проверка таблиц базы данных

Для проверки корректности таблиц воспользуемся командой DESCRIBE:
Например проверим таблицу wp_comments командой:

DESCRIBE wp_comments;

wordpress-mysql-error_3
И в результате ее работы получим следующую информацию (пример для исправной таблицы):
wordpress-mysql-error_4
Если у вас в колонке Extra отсутствует значение auto_increment для поля comment_ID, то необходимо выполнить следующую команду:

ALTER TABLE wp_comments CHANGE comment_ID `comment_ID` bigint(20) unsigned NOT  AUTO_INCREMENT;

wordpress-mysql-error_5
Если отсутствует Перви́чный ключ 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.

Список использованных источников

При написании статьи были использованы следующие ресурсы:

  1. http://got-quadrat.ru/blog/vosstanovlenie-klyuchej-v-tablitsah-wordpress/

Обсуждение: 5 комментариев

  1. Ильдар Хакимов:

    Привет. У меня не добавляются новые категории и меню, вот что выдает дескрайб:

    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;

    Помогите!

    Ответить
  2. Ильдар Хакимов:

    То есть не срабатывает:

    ALTER TABLE wp_terms CHANGE term_id ‘term_id’ bigint(20) unsigned NO NULL AUTO_INCREMENT;

    Посты таким образом где-то недельку назад исправил, а меню не могу. Пришла идея скачать дамп таблицы и там вписать автоинкремент, сейчас попробую…

    Ответить
  3. Ильдар Хакимов:

    Да, получилось редактируя дамп исправить ситуацию, просмотрел все таблицы, взял пример из wp_options и все заработало, правда пришлось еще одну таблицу также восстанавливать — wp_term_taxonomy.

    Ответить
    1. Ильдар, спасибо за исследования и комментарий. На момент написания статьи все работало, но я решил проверить ваши замечания и убедился в правоте ваших слов. Действительно с некоторыми таблицами команды не проходят из-за ошибок. Но что самое интересное в этих таблицах автоинкремент успешно добавляется через GUI PhpMyAdmin. Предполагаю, что исправлять таблицы можно только на неработающем сайте. Как рекомендовано здесь http://got-quadrat.ru/blog/vosstanovlenie-klyuchej-v-tablitsah-wordpress/

      Ответить
  4. Никита:

    Здравствуйте! У меня выскакивает ошибка «Вы редактируете страницу, на которой отображаются свежие записи.» только при добавлении страниц. При добавлении записи такого нет. В БД все проверил, там все ок. В чем может быть причина?

    Перед появлением данной ошибки я создал отдельный шаблон для страницы WP в отдельном php-файле, но забыл задать ему имя, залил на FTP, и попытался создать страницу. После удаления данного файла-шаблона ошибка осталась…

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить" я даю свое согласие на обработку введенной мной персональной информации в соответствии с Федеральным Законом от 27.07.2006 №152-ФЗ "О персональных данных", на условиях и для целей определенных политикой конфиденциальности.

2017 © Технический блог
SQL - 76 | 0,229 сек. | 10.48 МБ
доступность сайта