实测 MySQL ERROR 1040:max_connections=5 时第 6 个普通连接报 (1040, Too many connections),root 多一个名额;空闲的 Sleep 连接照样占名额;SET GLOBAL max_connections 立即生效,SET GLOBAL wait_timeout 只对新连接生效,老连接 5 秒后仍全部活着;20 个线程各自连失败 16 个,4 个连接的连接池全部成功。
实测 MySQL ERROR 1205:默认只回滚超时的那一条语句、事务还开着(innodb_rollback_on_timeout=ON 才整个回滚);用 sys.innodb_lock_waits 找到 Sleep 状态没提交的堵人事务,KILL 后等的人 1.52 s 成功;WHERE 没有索引时 6 个记录锁锁住全表,有索引只有 3 个;死锁 1213 约 1.1 ms 就报,和 1205 的 2.01 s 不同。
实测 MySQL ERROR 1062 Duplicate entry:报错文本里 for key 是 表名.索引名;默认排序规则下 Abc/abc、e/é 算重复而末尾空格不算,utf8mb4_bin 反过来;多行 INSERT 一行冲突整条失败,INSERT IGNORE 悄悄丢新值;REPLACE 让 id 从 1 变成 5;失败的 INSERT 也消耗自增 id;8 线程先查后插表里 400 行,有唯一索引则 1062 出现 350 次、只留 50 行。
实测 MySQL ERROR 1406:varchar 长度按字符算,5 个 emoji(20 字节)放得进 varchar(5);严格模式下超长整条语句失败,sql_mode 为空时变成 Warning 1265 悄悄截断;相邻的 1264、1074(varchar 最大 16383)、TEXT 65535 字节;缩列报 1265;20 万行表加宽 varchar,不跨 255 字节 1 ms,跨过就要 COPY 271 ms。
实测 MySQL ERROR 1366:建表写 charset=utf8 实际是 utf8mb3,放 emoji、生僻字 𠮷 都报 1366,汉字和 € 不会;连接字符集错配矩阵里 utf8mb4 列 + latin1 连接写汉字不报错、读回 汉;convert to utf8mb4 在 10 万行表上 453 ms,COMPACT 老表撞 767 字节索引上限(1071),先改 DYNAMIC 即可。
实测 MySQL ERROR 1153:服务器上限 1 MiB 时 PyMySQL 看到的是 2006 加 Broken pipe、命令行客户端才是 1153;整条 SQL 最长 1048574 字节,PyMySQL 的 bytes 参数被拼成十六进制只能放 524271 字节;SET GLOBAL 只对新连接生效,SET SESSION 报 1621;executemany 的 max_stmt_length 是 1024000;客户端限制是 ERROR 2020。
实测 MySQL ERROR 1055 ONLY_FULL_GROUP_BY:关掉它之后 name 是组里任意一行,换成 idx_ds(dept, salary) 索引结果就变(恰好最高薪的部门 8/1000 变成 0/1000);GROUP BY 主键、非空唯一列不报错而可空唯一列报错;20 万行每组取最高薪:ANY_VALUE 全错 147.8 ms,窗口函数 358.9 ms,JOIN 子查询 5.5 ms,相关子查询 5298.3 ms。
实测 MySQL ERROR 1215:在 26.10.0 上类型不兼容报 3780,被引用列不是唯一键完整列报 6125,父表打不开报 1824,只有子表是临时表还报 1215;foreign_key_checks=0 绕不过 3780;MyISAM 子表悄悄忽略外键;已有孤儿行加外键报 1452,关掉检查可以硬加但孤儿行还在;1451 与 1452 的方向。
实测 MySQL 2006 与 2013:空闲超过 wait_timeout 后下一次使用报 2006 且连接作废;KILL 与 kill -9 服务器中途报 2013,KILL QUERY 报 1317 连接保留;客户端 read_timeout 到期报 2013 但服务器上的查询照常跑完;40 次使用里不检查失败 22 次、recycle 与 ping 都是 0;应答丢失的 INSERT 重试后无唯一键表里变成 2 行。
实测 Redis MISCONF:BGSAVE 因目录只读失败后,有保存点的实例所有写命令(以及 PING)返回 MISCONF,读命令照常;原因在 redis.log 的 Permission denied;没有保存点或 stop-writes-on-bgsave-error no 都不触发;修好目录后重新 BGSAVE 成功,写自动恢复。
实测 Redis OOM command not allowed:maxmemory 20mb 下 noeviction 写 40000 个 1 KB key 成功 15090、报错 24910,used_memory 略超上限;9 类写命令被拒、8 类读删命令照常;DEL 能立刻恢复写;30 MB 的单个 value 直接被拒;allkeys-* 淘汰后 0 次 OOM,volatile-lru 在 key 没有 TTL 时仍然 14900 次 OOM。
实测 Redis WRONGTYPE:13 条命令 × 6 种类型的矩阵(每条命令只有一种类型能 ok);TYPE / EXISTS / DEL 等不看类型;SET 与 RENAME 悄悄覆盖任何类型的 key 而 SET NX / COPY 不会;MULTI/EXEC 与 Lua 里出错不回滚;SCAN … TYPE 找出 user:* 里混进来的 3 个字符串 key。