MariaDB 中文社区

错误码字典

MariaDB 最常见的 50 条错误码,每条给人话原因 + 解决 + 预防

浏览器里 Ctrl/Cmd + F 搜你看到的错误码或关键词。

按错误号排序。


1006 — Can't create database

ERROR 1006 (HY000): Can't create database 'foo'

原因:数据目录无权限 / 磁盘满 / 名字冲突。

解决

sudo chown -R mysql:mysql /var/lib/mysql
df -h /var/lib/mysql      # 查磁盘

1045 — Access denied

ERROR 1045 (28000): Access denied for user 'foo'@'host'

原因:密码错 / 主机限制不允许 / 账号不存在。

解决

-- 查账号到底有哪些 host 允许
SELECT user, host FROM mysql.user WHERE user = 'foo';
-- 重置密码
ALTER USER 'foo'@'%' IDENTIFIED BY 'newpass';
FLUSH PRIVILEGES;

1049 — Unknown database

ERROR 1049 (42000): Unknown database 'foo'

原因:库不存在或当前用户没权限看到。

解决SHOW DATABASES; 确认;或 CREATE DATABASE foo;


1062 — Duplicate entry for key

ERROR 1062 (23000): Duplicate entry 'a@x.com' for key 'uq_email'

原因:唯一索引冲突。

解决

-- 处理重复时的常见模式
INSERT INTO users (email) VALUES (?) ON DUPLICATE KEY UPDATE updated_at = NOW();
-- 或
INSERT IGNORE INTO users (email) VALUES (?);
-- MariaDB 10.5+: 安全的 upsert
INSERT INTO users (email) VALUES (?) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id);

1064 — SQL syntax error

ERROR 1064 (42000): You have an error in your SQL syntax

原因:SQL 拼错。

排查:错误信息里"near '...'"指出错误位置;用了保留字(ordergroup 等)作为列名时要反引号。

-- ❌
SELECT order FROM tbl;
-- ✅
SELECT `order` FROM tbl;

1146 — Table doesn't exist

ERROR 1146 (42S02): Table 'mydb.users' doesn't exist

原因:表名拼错 / 大小写敏感 / 未切到正确 db。

排查

SHOW TABLES LIKE 'us%';
SELECT @@lower_case_table_names;   -- Linux 默认 0:大小写敏感

1213 — Deadlock found

ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

原因:两个事务互相等对方持有的锁。

解决:MariaDB 已自动回滚其中一个,应用层重试

for _ in range(3):
    try:
        run_transaction()
        break
    except mariadb.OperationalError as e:
        if e.errno == 1213:
            time.sleep(0.05); continue
        raise

预防:所有事务按固定顺序访问表/行;缩短事务时长。详见 事务


1205 — Lock wait timeout exceeded

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

原因:等行锁超过 innodb_lock_wait_timeout(默认 50s)。

排查

SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
-- 找到阻塞的事务并 KILL
KILL 12345;

1216 / 1217 — Foreign key constraint fails

ERROR 1216: Cannot add or update a child row: foreign key constraint fails
ERROR 1217: Cannot delete or update a parent row: foreign key constraint fails

原因:父表没这行 / 子表还有引用。

解决:删父行前先删子行;插子行前先建父行;或加 ON DELETE CASCADE


1226 — User has exceeded the 'max_questions' resource

ERROR 1226 (42000): User 'app' has exceeded the 'max_user_connections' resource

原因:账号资源被限。

解决

ALTER USER 'app'@'%' WITH MAX_USER_CONNECTIONS 100;
FLUSH PRIVILEGES;

1227 — Access denied; you need ... privilege

ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege

原因:账号权限不够做这个操作(如改 GLOBAL 变量)。

解决:用 root 或单独 GRANT。


1264 — Out of range value

ERROR 1264 (22003): Out of range value for column 'count'

原因:数字越界(如 INT 存了 > 2147483647)。

解决:改 BIGINT;或检查输入。


1273 — Unknown collation

ERROR 1273: Unknown collation: 'utf8mb4_0900_ai_ci'

原因:导入了 MySQL 8 的 dump 文件,里面有 MariaDB 不认识的 collation。

解决sed -i 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g; s/utf8mb4_0900_as_cs/utf8mb4_unicode_ci/g' dump.sql。详见 迁移:MySQL 8 → MariaDB 11


1364 — Field 'xxx' doesn't have a default value

原因:sql_mode 含 STRICT_TRANS_TABLES,INSERT 时漏列。

解决:给列加默认值,或 INSERT 时显式赋值。


1366 — Incorrect string value

ERROR 1366: Incorrect string value: '\xF0\x9F\x98\x80' for column 'msg'

原因:列字符集是 utf8(3-byte),存不下 4-byte UTF-8(如 emoji)。

解决:改成 utf8mb4

ALTER TABLE messages MODIFY msg VARCHAR(255) CHARACTER SET utf8mb4;

1396 — Operation CREATE USER failed

原因:用户已存在。

解决DROP USER 'x'@'host' 然后重建,或用 CREATE USER IF NOT EXISTS


1406 — Data too long for column

原因:插入的字符串超过列定义长度。

解决:扩列或截断;推荐扩列。


1426 — Too big precision

原因DECIMAL(M,D) 中 M > 65 或 D > 30。


1452 — Cannot add foreign key constraint

原因:父子列类型 / 字符集 / collation 不一致;父列没索引;存储引擎不是 InnoDB。

解决:让两边完全一致;用 InnoDB。


1467 — Failed to read auto-increment value from storage engine

原因:磁盘问题 / 表损坏。

解决

CHECK TABLE foo;
REPAIR TABLE foo;

1709 — Index column size too large

原因:索引列太宽(如 VARCHAR(1000) 用 utf8mb4 = 4000 字节,超过 3072 索引上限)。

解决:用前缀索引 INDEX idx (col(255)),或缩短列。


1819 — Your password does not satisfy the current policy requirements

原因:装了密码策略插件。

解决:临时降低要求,或满足复杂度:

SET GLOBAL validate_password_policy = LOW;

1864 — Multi-statement transaction required more than 'max_binlog_cache_size'

原因:单事务的 binlog 太大。

解决:拆事务;或调高 max_binlog_cache_size


1927 — Connection was killed

原因:管理员或心跳超时 KILL 了你的连接。

排查

SHOW VARIABLES LIKE '%timeout%';
-- wait_timeout, interactive_timeout

2002 — Can't connect through socket

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

原因:服务没启动 / socket 路径错。

解决

systemctl status mariadb
sudo systemctl start mariadb
mariadb --socket=/correct/path/mysqld.sock

2003 — Can't connect to MySQL server on host

原因:网络 / 防火墙 / 端口;或服务没监听对外。

排查

nc -zv host 3306
sudo lsof -i :3306

my.cnfbind-address = 0.0.0.0(而非 127.0.0.1)才能对外。


2005 — Unknown MySQL server host

原因:DNS 解析不了。


2006 — MySQL server has gone away

原因:连接被服务端断(超时 / 重启 / max_allowed_packet 超)。

解决

SET GLOBAL max_allowed_packet = 64 * 1024 * 1024;  -- 64 MB

应用层 retry。


2013 — Lost connection during query

原因:网络抖动 / 查询超时被杀。

解决:retry + 看慢日志。


2026 — SSL connection error

原因:TLS 握手失败 — 证书 / TLS 版本 / 双方启用不一致。

排查SHOW STATUS LIKE 'Ssl_cipher';


3098 — The table does not comply with the requirements by an external plugin

原因:表不符合 audit / 加密插件要求。

解决:看具体插件文档。


3503 — Got error 'XX' from regexp

原因:正则语法错。MariaDB 用 PCRE。


4031 — The client was disconnected by the server because of inactivity

原因wait_timeout 超。

解决:连接池配置 idle 回收;或调大 timeout。


SQLSTATE HY000 综合错误

很多 server 内部错误都用 HY000 + 具体 errno。看 errno 是真信息。


排查通用思路

  1. 看完整错误:包括 SQLSTATE、errno、message 三部分
  2. 看 SHOW ENGINE INNODB STATUS:锁、死锁、IO 都在这
  3. 看错误日志SELECT @@log_error; 找到位置
  4. 看慢日志:500ms+ 的查询
  5. 看 PROCESSLISTSHOW FULL PROCESSLIST;
-- 一站式诊断
SHOW ENGINE INNODB STATUS\G
SELECT * FROM information_schema.PROCESSLIST WHERE state != '';
SELECT * FROM information_schema.INNODB_LOCK_WAITS;

你没找到?

MariaDB 官方错误码列表,或在 GitHub 给本站提 issue 补一条。

AI 友好提示:把这一页喂给 Cursor / Claude,它能在你贴错误时直接对照。

本页目录