Windows
Коды ошибок MySQL — расшифровка и способы устранения
- Рисккоманды из таблицы не удаляют данные, кром…
- Свежестьсверено 28.09.2026
- Чтение8 мин
Коротко
- 01
Код ошибки MySQL — число (1045, 2002 и другие) с официальной формулировкой в справочнике dev.mysql.com.
- 02
Главная причина большинства — неверные учётные данные, лимиты подключений или ошибка синтаксиса запроса.
- 03
Первое действие — найти точный код через SHOW ERRORS или perror, затем свериться с таблицей ниже.
- 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). Приложения обычно показывают либо число, либо текст — иногда оба.
- Если код известен — откройте официальный справочник по ссылке выше и найдите его по номеру (Ctrl+F).
- Если код неизвестен, а есть только текст ошибки на английском — расшифровать его локально поможет утилита
perror, входящая в дистрибутив MySQL:perror --mysql-errno 1045 - Если в консоли MySQL произошла ошибка и нужны подробности — выполните:
SHOW ERRORS; SHOW WARNINGS; - Расположение файла журнала ошибок сервера:
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 восстанавливается автоматически при перезапуске.
- Проверить все таблицы:
mysqlcheck -u root -p --all-databases - Исправить повреждённые:
mysqlcheck -u root -p --auto-repair --all-databases - Или напрямую в консоли:
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
- MySQL Server Error Message Reference (официальный) dev.mysql.com
- MySQL Client Error Message Reference (официальный) dev.mysql.com
Факты сверены с первоисточниками 28 сентября 2026.