Ошибка: Не удалось вставить запись в базу данных. Последняя запись (Без названия). Ошибка AUTO_INCREMENT ID=0
В чем проблема, статьи не грузит. Последняя запись - вообще не запись - (Без названия)
Ошибка: Не удалось вставить запись в базу данных
И ошибки при сохранении, добавлении: Не удалось вставить запись в базу данных , changeset_post_save_failure
Мне кажется я нашел решение, которое исправляет ошибку с ID=0
1.Создаём файл fix_all.php в корневой папке сайта (там же, где wp-config.php).
2.Вставить туда этот код:
<?php
// Загружаем настройки WordPress
require_once('./wp-config.php');
global $wpdb;
echo "<h2>Начинаем ремонт базы данных...</h2>";
echo "<ul>";
// Получаем список всех таблиц с префиксом wp_
$tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}%'");
foreach ($tables as $table) {
echo "<li>Обработка: <b>$table</b> ... ";
// 1. Находим имя главного ключа (Primary Key)
$pk_info = $wpdb->get_row("SHOW INDEX FROM $table WHERE Key_name = 'PRIMARY'");
if (!$pk_info) {
echo "нет PK, пропуск.</li>";
continue;
}
$pk_col = $pk_info->Column_name;
// 2. Удаляем запись с ID=0 (если есть)
$wpdb->query("DELETE FROM $table WHERE `$pk_col` = 0");
// 3. Узнаем тип колонки (например, bigint(20) unsigned)
$col_info = $wpdb->get_row("DESCRIBE $table $pk_col");
if (!$col_info) {
echo "ошибка чтения типа.</li>";
continue;
}
$col_type = $col_info->Type;
// 4. Восстанавливаем AUTO_INCREMENT
// Важно: используем MODIFY, чтобы не менять структуру, а только добавить флаг
$sql = "ALTER TABLE $table MODIFY `$pk_col` $col_type NOT NULL AUTO_INCREMENT";
$result = $wpdb->query($sql);
if ($result === false) {
echo "<span style='color:red'>ОШИБКА: " . $wpdb->last_error . "</span></li>";
} else {
echo "<span style='color:green'>УСПЕХ!</span></li>";
}
}
echo "</ul><h3>Готово! Теперь удали этот файл.</h3>";
?>
3. Запустим скрипт в браузере:
https://zaplata.ru/fix_all.php
Ты увидишь список таблиц. Напротив исправленных будет написано УСПЕХ!
Если где-то будет ошибка — скрипт напишет красным (скорее всего, там нет автоинкремента по природе таблицы, это ок).
4.Удали файл fix_all.php через файловый менеджер (это важно для безопасности!)
Давай по порядку. Будем искать проблему методом исключения:
Нужно смотреть debug.log
1. Есть ошибка? WordPress database error Duplicate entry '0' for key 'wp_posts.PRIMARY' Это критическая проблема с автоинкрементом таблицы wp_posts после миграции. База данных пытается создать запись с ID=0, но либо такая запись уже есть, либо счётчик AUTO_INCREMENT сбился.
Открой phpMyAdmin
Проверь, есть ли запись с ID=0
SELECT * FROM wp_posts WHERE ID = 0;
Если запись есть удали её
DELETE FROM wp_posts WHERE ID = 0;
Сбрось и установи правильный AUTO_INCREMENT
Посмотри текущий максимальный ID
SELECT MAX(ID) FROM wp_posts;
Установи AUTO_INCREMENT на значение на 1 больше максимума
(замени 1234 на реальный макс. ID + 1)
ALTER TABLE wp_posts AUTO_INCREMENT = 1234;
Оптимизируй таблицу (на всякий случай)
OPTIMIZE TABLE wp_posts;
Исправь wp-config.php
Добавь обе константы (перед /* That's all, stop editing! */):
Проверяем...Если опять также ошибка. Смотрим логи и wp_posts.PRIMARY остаётся, значит, сбился сам механизм AUTO_INCREMENT
Диагностика
-- 1. Текущее значение AUTO_INCREMENT и статус таблицы
SHOW TABLE STATUS LIKE 'wp_posts';
-- 2. Структура поля ID
SHOW COLUMNS FROM wp_posts WHERE Field = 'ID';
-- 3. Максимальный ID и есть ли "дыры" в начале
SELECT MAX(ID) as max_id, MIN(ID) as min_id FROM wp_posts;
SELECT ID FROM wp_posts WHERE ID <= 10 ORDER BY ID;
-- 4. Проверка на триггеры (редко, но бывает)
SHOW TRIGGERS WHERE `Table` = 'wp_posts';
У меня в результате видно, Auto_increment = NULL
В столбце Extra пусто - там должно быть auto_increment
Auto_increment
Выполняем запрос:
-- 1. Сначала удали запись с ID=0
DELETE FROM wp_posts WHERE ID = 0;
-- 2. Восстанови атрибут AUTO_INCREMENT у поля ID
ALTER TABLE wp_posts MODIFY COLUMN ID bigint(20) unsigned NOT NULL AUTO_INCREMENT;
-- 3. Установи правильное следующее значение (max_id + 1)
ALTER TABLE wp_posts AUTO_INCREMENT = 42553;
-- 4. Проверь, что получилось
SHOW TABLE STATUS LIKE 'wp_posts';
-- wp_posts
DELETE FROM wp_posts WHERE ID = 0;
ALTER TABLE wp_posts MODIFY COLUMN ID bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_posts AUTO_INCREMENT = 10000000;
-- wp_postmeta
DELETE FROM wp_postmeta WHERE meta_id = 0;
ALTER TABLE wp_postmeta MODIFY COLUMN meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_postmeta AUTO_INCREMENT = 10000000;
-- wp_users
ALTER TABLE wp_users MODIFY COLUMN ID bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_users AUTO_INCREMENT = 10000000;
-- wp_usermeta
DELETE FROM wp_usermeta WHERE umeta_id = 0;
ALTER TABLE wp_usermeta MODIFY COLUMN umeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_usermeta AUTO_INCREMENT = 10000000;
-- wp_comments
DELETE FROM wp_comments WHERE comment_ID = 0;
ALTER TABLE wp_comments MODIFY COLUMN comment_ID bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_comments AUTO_INCREMENT = 10000000;
-- wp_commentmeta
DELETE FROM wp_commentmeta WHERE meta_id = 0;
ALTER TABLE wp_commentmeta MODIFY COLUMN meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_commentmeta AUTO_INCREMENT = 10000000;
-- wp_terms
ALTER TABLE wp_terms MODIFY COLUMN term_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_terms AUTO_INCREMENT = 10000000;
-- wp_term_taxonomy
ALTER TABLE wp_term_taxonomy MODIFY COLUMN term_taxonomy_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_term_taxonomy AUTO_INCREMENT = 10000000;
-- Action Scheduler
DELETE FROM wp_actionscheduler_actions WHERE action_id = 0;
ALTER TABLE wp_actionscheduler_actions MODIFY COLUMN action_id bigint unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_actionscheduler_actions AUTO_INCREMENT = 10000000;
DELETE FROM wp_actionscheduler_groups WHERE group_id = 0;
ALTER TABLE wp_actionscheduler_groups MODIFY COLUMN group_id int unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_actionscheduler_groups AUTO_INCREMENT = 10000000;
DELETE FROM wp_actionscheduler_claims WHERE claim_id = 0;
ALTER TABLE wp_actionscheduler_claims MODIFY COLUMN claim_id bigint unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_actionscheduler_claims AUTO_INCREMENT = 10000000;
DELETE FROM wp_actionscheduler_logs WHERE log_id = 0;
ALTER TABLE wp_actionscheduler_logs MODIFY COLUMN log_id bigint unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE wp_actionscheduler_logs AUTO_INCREMENT = 10000000;
-- 1. Удаляем битую запись с ID 0
DELETE FROM wp_actionscheduler_actions WHERE action_id = 0;
-- 2. Возвращаем атрибут автоинкремента
ALTER TABLE wp_actionscheduler_actions MODIFY COLUMN action_id bigint(20) unsigned NOT NULL AUTO_INCREMENT;
-- 3. Сдвигаем счетчик вперед
ALTER TABLE wp_actionscheduler_actions AUTO_INCREMENT = 10000000;
Николай
Если миниатюры не устанавливаются на записи и вообще работа с картинками - права на uploads 755
да и вообще примените 755 ко всем папкам и файлам
Николай
Такая проблема скорее всего из-за "быстрой" выгрузки БД.
phpMyAdmin не прописывает AUTO_INCREMENT в SQL-дампе.
Если миниатюры не устанавливаются на записи и вообще работа с картинками - права на uploads 755
да и вообще примените 755 ко всем папкам и файлам
Такая проблема скорее всего из-за "быстрой" выгрузки БД.
phpMyAdmin не прописывает AUTO_INCREMENT в SQL-дампе.
Пробуйте выгружать БД через бекап текущий
Да и вообще и файлы и БД через бекап. точно не потеряется
а дальше по инструкции
https://zaplata.ru/forum/manual/wordpress-hosting-beget