Главная

Полный сброс и проверка счётчиков сущностей в Drupal

11-10-2025

Иногда после миграций или массового удаления контента в 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 полностью «обнулён» и готов к новому чистому импорту или наполнению.

Похожие статьи