Обратите внимание! Недорогие виртуальные серверы в Амстердаме (Нидерланды). Оплата в рублях картами банков РФ, СБП, электронными деньгами. Подробнее.

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

Опубликовано: 26 июня 2016 / Обновлено: 6 января 2018
Раздел(ы): MySQL, WordPress, Вебмастеру
Просмотры: 7590
Комментарии: 6

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

  • Невозможно создать публикацию любого типа (запись, страницу). При этом 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-ошибке веб-сервера.

Как исправить ошибку 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/

Обсуждение (комментарии к статье)

  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, и попытался создать страницу. После удаления данного файла-шаблона ошибка осталась…

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

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

Нажимая кнопку "Отправить" Вы даёте свое согласие на обработку введенной персональной информации в соответствии с Федеральным Законом №152-ФЗ от 27.07.2006 "О персональных данных", на условиях и для целей определенных политикой конфиденциальности сайта.
© Юрий Рассадников, 2011 - 2024
uptime узнать
Домен : reg.ru
Хостинг : adman.com
SQL - 8 | 0,329 сек. | 9.47 МБ