Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
MYSQL-ERR-1146 Linux / DevOps

MySQL Ошибка 1146 (42S02): Table 'db.table' doesn't exist (Регистр lower_case_table_names)

Обновлено: 21.08.2026  ·  Официальная база знаний

Архитектура именования и хранения метаданных таблиц в MySQL

Системная ошибка MySQL Error 1146 (SQLSTATE 42S02): «Table 'database.table_name' doesn't exist» генерируется анализатором запросов СУБД, когда запрошенная таблица, представление (VIEW) или временная таблица не найдены в системном словаре данных (Data Dictionary). В операционных системах Linux имена файлов и каталогов чувствительны к регистру (Case-Sensitive), поэтому таблицы Users и users на диске представляют собой разные объекты. Главные причины ошибки:

  • Конфликт регистра символов: Перенос базы данных между ОС Windows/macOS (где регистр не учитывается) и Linux (где регистр строгий).
  • Повреждение словаря данных (InnoDB Dictionary Corruption): Физический файл табличного пространства table_name.ibd существует на диске, но запись о таблице отсутствует в системном словаре метаданных (в MySQL 8.0 таблица mysql.tables).
  • Отсутствие прав на представление (VIEW): Базовая таблица представления была удалена или переименована.

Бизнес-риски

Полная остановка функционала веб-ресурса (HTTP 500 Fatal Database Error), сбой автотестов и миграций, невозможность развертывания бэкапов.

Сравнение значений системного параметра lower_case_table_names

ЗначениеПоведение при создании / поискеПоддерживаемые ОС
0Имена таблиц хранятся и сравниваются с учетом регистра.Linux / Unix (по умолчанию).
1Имена таблиц приводятся к нижнему регистру на диске и при поиске.Windows (по умолчанию), рекомендуется для кроссплатформенности.
2Имена сохраняются как заданы, но сравниваются в нижнем регистре.macOS (по умолчанию).

Регламент локализации и устранения ошибки отсутствия таблицы

Сценарий 1: Проверка физического наличия файлов на диске и прав доступа

Проверьте каталог данных MySQL (обычно /var/lib/mysql/имя_базы/):

# 1. Проверка существования файлов .ibd/.frm в каталоге базы данных:
sudo ls -la /var/lib/mysql/my_database/

# 2. Восстановление корректных прав владельца mysql:mysql:
sudo chown -R mysql:mysql /var/lib/mysql/
sudo chmod -R 750 /var/lib/mysql/

# 3. Перезапуск службы:
sudo systemctl restart mysql

Сценарий 2: Настройка регистра lower_case_table_names (MySQL 8.0+)

Внимание: в MySQL 8.0 параметр lower_case_table_names может быть задан ТОЛЬКО при первичной инициализации кластера СУБД (mysqld --initialize).

# Порядок перевода базы на lower_case_table_names=1 в Linux:
# 1. Сделайте полный дамп всех баз данных:
mysqldump -u root -p --all-databases --routines --triggers > /backup/all_databases.sql

# 2. Остановите службу и очистите каталог данных:
sudo systemctl stop mysql
sudo rm -rf /var/lib/mysql/*

# 3. Задайте директиву в /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
lower_case_table_names = 1

# 4. Выполните повторную инициализацию каталога данных:
sudo mysqld --initialize --user=mysql --lower-case-table-names=1

# 5. Запустите службу и восстановите дамп:
sudo systemctl start mysql
mysql -u root -p < /backup/all_databases.sql

Сценарий 3: Восстановление «осиротевшего» .ibd файла (Orphan Tablespace)

Если файл mytable.ibd остался на диске, но MySQL возвращает Ошибку 1146:

-- 1. Создайте идентичную по структуре пустую таблицу:
CREATE TABLE `mytable` ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=InnoDB;

-- 2. Отсоедините пустое табличное пространство:
ALTER TABLE `mytable` DISCARD TABLESPACE;

-- 3. В терминале Linux скопируйте оригинальный .ibd файл на место нового:
-- sudo cp /backup/mytable.ibd /var/lib/mysql/my_database/mytable.ibd
-- sudo chown mysql:mysql /var/lib/mysql/my_database/mytable.ibd

-- 4. В консоли MySQL импортируйте оригинальное пространство:
ALTER TABLE `mytable` IMPORT TABLESPACE;

Типовые ошибки администраторов

  • Попытка изменить lower_case_table_names в my.cnf на существующей базе MySQL 8.0: Сервер MySQL аварийно откажется запускаться с ошибкой «Different lower_case_table_names settings cannot be used with an existing data directory».
  • Переименование файлов .ibd вручную через команду Linux mv: Ручное переименование файлов на диске разрушает внутренние таблицы метаданных InnoDB и приводит к падению СУБД.
База данных потеряла привязку к таблицам после сбоя или переноса файлов?
Специалисты ITSTM восстановят поврежденные словари данных InnoDB Data Dictionary и выполнят бесшовный импорт табличных пространств.
Практический опыт инженера: При экспорте дампов для переноса с Windows/macOS на Linux всегда используйте флаг mysqldump --order-by-primary. В коде приложений всегда строго соблюдайте единый snake_case стиль для имен всех таблиц и колонок.

Частые вопросы (FAQ)

Почему в phpMyAdmin таблица видна в списке, но при клике на нее возникает ошибка 1146?

Это происходит, когда метаданные таблицы есть в информационном словаре, но физический файл .ibd на диске был удален или переименован.

Как быстро найти все битые представления (VIEW), выдающие ошибку 1146?

Выполните утилиту проверки целостности: mysqlcheck -u root -p --all-databases --check-views.

Можно ли исправить регистр одной таблицы без переинициализации сервера?

Да, выполните команду RENAME TABLE `OldName` TO `oldname_tmp`; RENAME TABLE `oldname_tmp` TO `oldname`;.

Почему при выполнении SELECT * FROM table возникает 1146, а при SHOW TABLES таблица отображается?

В MySQL 5.7 список SHOW TABLES читается из файлов .frm, а доступ к данным идет через движок InnoDB. Несоответствие между .frm и ibdata1 вызывает ошибку 1146.