коды ошибок

Windows

Коды ошибок MySQL — расшифровка и способы устранения

  • Рисккоманды из таблицы не удаляют данные, кром…
  • Свежестьсверено 28.09.2026
  • Чтение8 мин

Коротко

  1. 01

    Код ошибки MySQL — число (1045, 2002 и другие) с официальной формулировкой в справочнике dev.mysql.com.

  2. 02

    Главная причина большинства — неверные учётные данные, лимиты подключений или ошибка синтаксиса запроса.

  3. 03

    Первое действие — найти точный код через SHOW ERRORS или perror, затем свериться с таблицей ниже.

  4. 04

    Останавливайтесь и делайте резервную копию перед восстановлением таблиц или использованием innodb_force_recovery.

Код ошибки MySQL — это число вида 1045 или 2002, которое сервер или клиент возвращают при сбое запроса или подключения. Серверные ошибки (1000–1999 и выше) описаны в официальном Server Error Message Reference, клиентские (2000–2059) — в Client Error Message Reference. Ниже — как быстро понять, что означает ваш код, и разбор самых частых ошибок с готовыми командами.

Смотрите также: расшифровка кодов ошибок PostgreSQL.

Как найти значение своего кода ошибки MySQL

У каждой ошибки MySQL три идентификатора: числовой код (например, 1045), символьное имя (ER_ACCESS_DENIED_ERROR) и строка SQLSTATE (например, 28000). Приложения обычно показывают либо число, либо текст — иногда оба.

  1. Если код известен — откройте официальный справочник по ссылке выше и найдите его по номеру (Ctrl+F).
  2. Если код неизвестен, а есть только текст ошибки на английском — расшифровать его локально поможет утилита perror, входящая в дистрибутив MySQL:
    perror --mysql-errno 1045
  3. Если в консоли MySQL произошла ошибка и нужны подробности — выполните:
    SHOW ERRORS;
    SHOW WARNINGS;
  4. Расположение файла журнала ошибок сервера:
    SHOW VARIABLES LIKE 'log_error';

    По умолчанию на Linux — /var/log/mysql/error.log, на Windows — в каталоге данных MySQL.

Версии MySQL 5.7, 8.0, 8.4 (LTS) и 9.x используют одни и те же числовые коды для большинства ошибок — таблица ниже актуальна для всех них. При переходе с 5.7 на 8.x часть ошибок 1064 (синтаксис) и 1406 (длина данных) может появиться из-за изменившихся режимов SQL по умолчанию.

Причины появления ошибок MySQL

  • Неверные учётные данные подключения (логин, пароль, хост).
  • Превышение лимитов подключений или ресурсов сервера.
  • Ошибки синтаксиса SQL-запросов.
  • Нарушения целостности данных (дублирование ключей, NULL в NOT NULL полях).
  • Повреждённые таблицы (в основном движок MyISAM).
  • Недостаточно прав у пользователя БД.
  • Переполнение дискового пространства.
  • Взаимные блокировки (deadlock) в транзакциях InnoDB.

Частые серверные ошибки MySQL (1000–1999)

Код Имя Официальное сообщение Что делать
1040 ER_CON_COUNT_ERROR Too many connections Увеличить max_connections в my.cnf; найти и завершить зависшие соединения: SHOW PROCESSLIST;, затем KILL id;
1044 ER_DBACCESS_DENIED_ERROR Access denied for user to database Выдать права: GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'host'; FLUSH PRIVILEGES;
1045 ER_ACCESS_DENIED_ERROR Access denied for user (using password: yes/no) Проверить логин/пароль в конфигурации приложения; при утере пароля root — запустить сервер с --skip-grant-tables и сменить пароль (см. FAQ)
1049 ER_BAD_DB_ERROR Unknown database Создать БД: CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; или проверить имя в строке подключения
1054 ER_BAD_FIELD_ERROR Unknown column ‘x’ in ‘y’ Проверить имя столбца: DESCRIBE tablename;; частая причина — опечатка или отсутствующий алиас таблицы в JOIN (например, Unknown column 'company.id' in 'on clause')
1062 ER_DUP_ENTRY Duplicate entry for key Использовать INSERT IGNORE или INSERT ... ON DUPLICATE KEY UPDATE; найти дубликаты: SELECT col, COUNT(*) FROM t GROUP BY col HAVING COUNT(*) > 1;
1064 ER_PARSE_ERROR SQL syntax error near ‘…’ Проверить синтаксис в месте, указанном после «near»; частая причина — зарезервированное слово без обратных кавычек
1099 ER_TABLE_NOT_LOCKED_FOR_WRITE Table was locked with a READ lock UNLOCK TABLES; или проверить активные блокировки: SHOW OPEN TABLES WHERE In_use > 0;
1114 ER_RECORD_FILE_FULL The table is full Проверить свободное место на диске; для MyISAM — освободить место, для InnoDB — увеличить innodb_data_file_path
1146 ER_NO_SUCH_TABLE Table doesn’t exist Проверить имя таблицы: SHOW TABLES;; убедиться, что выбрана нужная БД: USE dbname;
1153 ER_NET_PACKET_TOO_LARGE Got a packet bigger than max_allowed_packet Увеличить в my.cnf: max_allowed_packet = 64M; для текущей сессии: SET GLOBAL max_allowed_packet = 67108864;
1194 ER_CRASHED_ON_USAGE Table is marked as crashed (только MyISAM) REPAIR TABLE tablename; или mysqlcheck -u root -p --repair dbname tablename
1205 ER_LOCK_WAIT_TIMEOUT Lock wait timeout exceeded Увеличить innodb_lock_wait_timeout; найти блокирующий запрос: SHOW ENGINE INNODB STATUS\G → раздел TRANSACTIONS
1213 ER_LOCK_DEADLOCK Deadlock found when trying to get lock Повторить транзакцию — deadlock — штатная ситуация InnoDB; обращаться к таблицам в одном порядке во всех транзакциях
1364 ER_NO_DEFAULT_FOR_FIELD Field doesn’t have a default value ALTER TABLE t MODIFY COLUMN col VARCHAR(255) NOT NULL DEFAULT ''; или передавать значение явно в INSERT
1406 ER_DATA_TOO_LONG Data too long for column ALTER TABLE t MODIFY COLUMN col TEXT; или обрезать данные перед вставкой
1451 ER_ROW_IS_REFERENCED_2 Cannot delete a parent row: foreign key constraint fails Удалить сначала зависимые записи; или временно: SET FOREIGN_KEY_CHECKS = 0; удалить, затем SET FOREIGN_KEY_CHECKS = 1;
1452 ER_NO_REFERENCED_ROW_2 Cannot add a child row: foreign key constraint fails Убедиться, что связанная запись существует, или добавить её первой

Клиентские ошибки (2000–2059)

Код Имя Официальное сообщение Что делать
2002 CR_CONNECTION_ERROR Can’t connect to local MySQL server through socket Проверить, запущен ли сервер: systemctl status mysql; проверить host/port в строке подключения и параметр bind-address
2006 CR_SERVER_GONE_ERROR MySQL server has gone away Увеличить wait_timeout и interactive_timeout; проверить max_allowed_packet; добавить переподключение в приложении

Что означает голое «MySQL Error!» без номера

Старые самописные сайты и движки (в том числе DataLife Engine) иногда выводят собственный текст вида «MySQL Error! … Error number: 1 The error returned was: Connection refused» — это не официальный код MySQL 1, а необработанный системный номер ошибки соединения (errno операционной системы), который скрипт сам подставил в сообщение. Он соответствует ситуации клиентской ошибки 2002 (CR_CONNECTION_ERROR): сервер MySQL не запущен, слушает не тот порт/адрес или заблокирован файрволом. Проверьте, что служба MySQL работает, и что host/port в конфигурации сайта совпадают с реальными.

Восстановление повреждённых таблиц

Таблицы MyISAM могут повреждаться при некорректном завершении работы MySQL. InnoDB восстанавливается автоматически при перезапуске.

  1. Проверить все таблицы:
    mysqlcheck -u root -p --all-databases
  2. Исправить повреждённые:
    mysqlcheck -u root -p --auto-repair --all-databases
  3. Или напрямую в консоли:
    CHECK TABLE tablename;
    REPAIR TABLE tablename;

Что делать, если ничего не помогло

  • Проверьте журнал ошибок MySQL (путь — см. раздел выше).
  • Восстановите базу из резервной копии: mysqldump -u root -p dbname > backup.sql — делайте бэкапы регулярно, а не только при сбое.
  • При ошибках InnoDB и невозможности запуска сервера — временно включите innodb_force_recovery = 1 в my.cnf для аварийного экспорта данных, затем восстановите базу из бэкапа.
  • В MySQL 8.x и новее по умолчанию используется плагин аутентификации caching_sha2_password вместо mysql_native_password — если старое приложение не поддерживает его, переключите пользователя: ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';

Ошибки вида DB::Exception с кодом «code: 392», «code: 6», «code: 207» — это не MySQL, а сервер ClickHouse. У ClickHouse собственная нумерация ошибок и протокол на порту 9000 — ищите расшифровку в официальной документации ClickHouse, а не в справочнике MySQL.

Частые вопросы

журнал · 6 записей
01Ошибка 1045 при подключении — как сбросить пароль root MySQL?

Остановите MySQL (systemctl stop mysql), запустите с флагом --skip-grant-tables --skip-networking, подключитесь без пароля (mysql -u root) и выполните:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Перезапустите MySQL в обычном режиме.

02Ошибка 1064 — как найти место ошибки синтаксиса?

MySQL указывает строку и позицию после слова «near». Частые причины: зарезервированные слова (ORDER, GROUP, KEY) как имена столбцов без обратных кавычек, пропущенные запятые, несовместимый синтаксис между версиями 5.7 и 8.x/9.x.

03Что такое deadlock (1213) и как его избежать?

Взаимная блокировка — транзакция A ждёт ресурс, занятый транзакцией B, и наоборот. InnoDB разрешает её автоматически, отменяя одну из транзакций. Чтобы снизить частоту: обращайтесь к таблицам в одном порядке во всех транзакциях, уменьшайте их длительность, добавьте повтор запроса при получении этой ошибки.

04Ошибка 2002 — MySQL не запускается на Windows?

Проверьте в диспетчере служб, запущена ли служба MySQL80/MySQL84. Посмотрите журнал ошибок в каталоге данных (обычно C:\ProgramData\MySQL\MySQL Server 8.0\Data\). Частая причина — порт 3306 занят другим процессом.

05Коды ошибок одинаковы в MySQL и MariaDB?

Для основных серверных ошибок (1000–2000-е, в том числе все из таблицы выше) — да, MariaDB сохраняет совместимость с нумерацией MySQL. Собственные ошибки MariaDB (начиная с 4000-х номеров) в справочнике MySQL не ищите — там отдельная документация MariaDB.

06Как правильно задать права пользователя MySQL?

Минимальный набор для CMS (WordPress, Bitrix, DLE):

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON dbname.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

Посмотреть текущие права: SHOW GRANTS FOR 'user'@'localhost';

Редакция allerrorcodes.ru · обновлено 28.09.2026

Факты сверены с первоисточниками 28 сентября 2026.

Что дальше

Ещё разборы: Windows