15.05.2020

Ошибка: Не удалось вставить запись в базу данных. Последняя запись (Без названия). Ошибка 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! */):

define('WP_HOME', 'https://zaplata.ru');
define('WP_SITEURL', 'https://zaplata.ru');

Проверяем...Если опять также ошибка. Смотрим логи и 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
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;


guest
Другие сообщения форума
Закрыть меню