MySQL и MariaDB LinuxWindowsmacOS 1146

MySQL: ERROR 1146 — Table doesn't exist

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

Таблица не найдена: неверная база, регистр имени в Linux или не применены миграции. Проверьте USE и SHOW TABLES.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Проверка
  5. Регистр и перенос
  6. Повреждения

#Что означает ошибка

1146
Table doesn't exist

Ошибка MySQL 1146 «Table doesn't exist» означает, что запрос обращается к таблице, которой нет в выбранной базе. Причины: запрос выполняется в другой базе, таблица не создана или удалена, регистр имени не совпадает (на Linux имена таблиц чувствительны к регистру) или файлы таблицы InnoDB повреждены.

Начните с проверки текущей базы и списка таблиц.

Потом сверьте регистр и префиксы.

Таблица не найдена: неверная база, регистр имени в Linux или не применены миграции. Проверьте USE и SHOW TABLES.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Не та базаUSE.1146.Выберите.
Регистр имениLinux.1146.Исправьте.
Нет миграцийСхема.1146.Примените.
Повреждена таблицаInnoDB.1146.Восстановите.

#Пошаговое решение

  1. Проверьте базуВ phpMyAdmin сначала выберите слева именно базу, используемую приложением, затем откройте вкладку «SQL» и выполните SELECT DATABASE();. В MySQL CLI после входа выполните ту же команду. Если результат NULL или имя не то, выберите правильную базу через USE имя_базы; (имя берите из конфигурации проекта) и повторите исходный запрос без изменения таблиц.
  2. Найдите таблицуВо вкладке «Структура» выбранной базы посмотрите фактические имена таблиц. В SQL можно выполнить SHOW TABLES; или прочитать information_schema.tables, не изменяя данные. Если предполагаемая таблица отсутствует, не создавайте пустую таблицу с таким именем наугад: проверьте, завершились ли миграции и импорт первоначальной схемы.
  3. Сверьте регистр и префиксСверьте точное написание, регистр букв и префикс имени таблицы с SQL приложения. На Linux имена таблиц нередко чувствительны к регистру, а WordPress и другие системы используют настраиваемый префикс. Исправьте имя в запросе или соответствующей конфигурации, не переименовывая рабочие таблицы без резервной копии и учёта внешних ключей.
  4. Проверьте импорт дампаЕсли ошибка появилась после переноса, откройте журнал импорта в панели базы или вывод mysql и выясните, на каком CREATE TABLE/INSERT процесс остановился. Проверьте, соответствует ли дамп выбранной базе и достаточно ли места. Перед повторным импортом сохраните текущее состояние и используйте отдельную тестовую базу: повторный импорт поверх действующей базы может дублировать данные.
  5. Проверьте журнал MySQLЕсли таблица видна, но обращение к ней по-прежнему вызывает ошибки, проверьте полное сообщение MySQL и журнал службы (journalctl -u mysql или журнал хостинга). Для InnoDB не применяйте REPAIR TABLE как универсальное лечение: выясните, не повреждены ли файлы, есть ли резервная копия и не требуется ли восстановление всего экземпляра. Повторно выполните безопасный SELECT после исправления причины.

#Проверка

Выполните SELECT DATABASE(); и SHOW TABLES LIKE '%имя%';. Если таблицы нет, проверьте, подключаетесь ли вы к нужной базе (параметры DB_NAME в конфиге приложения). Для CMS проверьте префикс таблиц (wp_, jos_). Выведите все таблицы всех баз: SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE '%имя%';.

#Регистр и перенос

На Linux имена таблиц чувствительны к регистру (lower_case_table_names=0), а на Windows нет: после переноса с Windows на Linux таблица Users не равна users. Переименуйте: RENAME TABLE Users TO users; или задайте lower_case_table_names=1 до инициализации сервера. Убедитесь, что дамп импортирован полностью: mysql -u user -p db < dump.sql и проверьте логи импорта.

#Повреждения

Если таблица есть в SHOW TABLES, но запрос даёт 1146, а в журнале Table ... doesn't exist in engine, файлы InnoDB повреждены или словарь не соответствует файлам. Остановите приложение, сделайте копию каталога данных, проверьте journalctl -u mysql и восстановите из резервной копии. Для MyISAM выполните REPAIR TABLE имя;. Режим innodb_force_recovery (1–3) позволяет выгрузить данные с помощью mysqldump.

SQLКоманда
Показывает текущую базу и места, где есть таблица с похожим именем.
SELECT DATABASE();
SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE '%users%';

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.