Иногда после миграций или массового удаления контента в Drupal новые материалы получают большие ID, например /node/85506. Это происходит из-за того, что счётчики в базе не сбрасываются автоматически. Ниже показано, как полностью обнулить все автоинкременты и проверить, что они действительно сброшены до нуля.
1. Проверка текущего значения
Посмотреть, с какого значения начинается нумерация нод:
drush sqlq "SHOW TABLE STATUS LIKE 'node';"Если в колонке Auto_increment стоит большое число, значит, нужно выполнить сброс.
2. Удаление контента
Сначала удаляем все ноды, файлы и комментарии, чтобы не мешали реальные данные:
drush entity:delete node -y
drush entity:delete file -y
drush entity:delete comment -y
3. Обнуление всех автоинкрементов
После очистки таблиц выполняем сброс счётчиков:
# Ноды и ревизии
drush sqlq "TRUNCATE node;"
drush sqlq "TRUNCATE node_field_data;"
drush sqlq "TRUNCATE node_revision;"
drush sqlq "TRUNCATE node_field_revision;"
drush sqlq "ALTER TABLE node AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE node_field_data AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE node_revision AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE node_field_revision AUTO_INCREMENT = 1;"
# Медиа
drush sqlq "TRUNCATE media;"
drush sqlq "TRUNCATE media_field_data;"
drush sqlq "TRUNCATE media_revision;"
drush sqlq "TRUNCATE media_field_revision;"
drush sqlq "ALTER TABLE media AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE media_field_data AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE media_revision AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE media_field_revision AUTO_INCREMENT = 1;"
# Таксономии
drush sqlq "TRUNCATE taxonomy_term_data;"
drush sqlq "TRUNCATE taxonomy_term_field_data;"
drush sqlq "ALTER TABLE taxonomy_term_data AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE taxonomy_term_field_data AUTO_INCREMENT = 1;"
# Файлы
drush sqlq "TRUNCATE file_managed;"
drush sqlq "ALTER TABLE file_managed AUTO_INCREMENT = 1;"
# Комментарии
drush sqlq "TRUNCATE comment;"
drush sqlq "TRUNCATE comment_field_data;"
drush sqlq "ALTER TABLE comment AUTO_INCREMENT = 1;"
drush sqlq "ALTER TABLE comment_field_data AUTO_INCREMENT = 1;"
4. Пересоздание таблицы sequences
Drupal использует таблицу sequences для хранения собственных счётчиков. Её также нужно пересоздать:
drush sqlq "DROP TABLE IF EXISTS sequences;"
drush sqlq "CREATE TABLE sequences (
name VARCHAR(255) NOT NULL PRIMARY KEY,
value BIGINT UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;"
drush sqlq "INSERT INTO sequences (name, value) VALUES
('node', 0),
('taxonomy_term', 0),
('file_managed', 0),
('media', 0),
('comment', 0);"
5. Проверка результата
После выполнения можно убедиться, что все счётчики действительно сброшены:
drush sqlq "SELECT * FROM sequences;"
drush sqlq "SHOW TABLE STATUS LIKE 'node';"
Если для node в таблице sequences стоит значение 0, а Auto_increment показывает 1 — всё готово. Новые ноды будут создаваться с адресов /node/1, /node/2 и так далее.
6. Очистка кэша
drush crТеперь Drupal полностью «обнулён» и готов к новому чистому импорту или наполнению.