程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
MySQL 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
MySQL 8.0 已经 EOL:先升主库还是先升从库,replica_allow_higher_version_source 决定了答案
综合
MySQL 8.0 已经 EOL:先升主库还是先升从库,replica_allow_higher_version_source 决定了答案
2026-11-04 21:07:45
MySQL 8.0.46 是 8.0 最后一个版本,2026 年 4 月起 EOL。往 8.4 还是 9.7 走、主库从库谁先升,本文按 replica_allow_higher_version_source 给出的可行排法来讨论,并附 cpuset cgroup 感知带来的线程数变化与升级前检查 SQL。
MySQL
运维
升级
复制
version
MySQL 9.7 把 UNIQUE NOT NULL 当主键等价:开着 sql_generate_invisible_primary_key 也不再补 GIPK
编程
MySQL 9.7 把 UNIQUE NOT NULL 当主键等价:开着 sql_generate_invisible_primary_key 也不再补 GIPK
2026-11-04 21:05:49
MySQL 9.7 起 UNIQUE NOT NULL 键在 CREATE/ALTER 中被视为主键等价,开着 sql_generate_invisible_primary_key 的表不再自动长 GIPK,SQL_REQUIRE_PRIMARY_KEY 下也能建这类表。附 InnoDB 行大小估算在 9.7.0 收紧、9.7.4 回退的排查顺序。
MySQL
数据库
DDL
GIPK
Seata AT 回滚报 Has dirty records when undo:镜像校验、全局锁与回滚顺序的排查记录
编程
Seata AT 回滚报 Has dirty records when undo:镜像校验、全局锁与回滚顺序的排查记录
2026-11-04 00:04:09
从 Seata AT 模式一次回滚失败切入:SQLUndoDirtyException 的四个判定分支、on update CURRENT_TIMESTAMP 如何破坏镜像校验、全局锁 lockKey 与 300ms 重试预算、undo_log 防悬挂记录,以及 2.0 正序回滚 bug(#6120)的复现条件与判据。
Seata
分布式事务
AT模式
undo_log
MySQL
Java
MySQL 9.7 的 enable_cascade_triggers:级联外键会触发子表触发器,复制路径不对称
编程
MySQL 9.7 的 enable_cascade_triggers:级联外键会触发子表触发器,复制路径不对称
2026-11-03 21:03:24
MySQL 9.7 新增 enable_cascade_triggers(默认 OFF):打开后 CASCADE 与 SET NULL 能激活子表 BEFORE/AFTER 触发器,触发器随发起语句执行、报错连同级联一起回滚。row-based 复制只记结果不重跑触发器,statement-based 按源设置走,混用 binlog_format 会让副本审计表分叉。
MySQL
主从复制
触发器
割接切了地址,旧库还有连接在跑:*sql.DB、DNS TTL、keepalive 三处滞留
综合
割接切了地址,旧库还有连接在跑:*sql.DB、DNS TTL、keepalive 三处滞留
2026-11-03 00:03:54
割接窗口里数据侧切完、连接侧没切完,是旧库流量掉不下去的常见原因。分别拆解 Go *sql.DB 连接池换 DSN 的坑、DNS TTL 与 JVM/resolver 缓存、Nginx upstream 与 conntrack 的 keepalive 滞留,给出旧库 processlist 的判读方法和按连接侧排序的窗口清单。
割接窗口
MySQL
Go
connect
pool
DNS
nginx
1461 报错先算 16382 ÷ 连接数:Node.js 驱动层 prepared statement 配额怎么定位
编程
1461 报错先算 16382 ÷ 连接数:Node.js 驱动层 prepared statement 配额怎么定位
2026-11-03 00:03:47
MySQL 报 1461(max_prepared_stmt_count 用尽)时,先算 16382÷连接数看每连接还能缓存几条。这篇从 Node 侧看:mysql2 的 maxPreparedStatements 默认 16000 几乎等于全局配额,Prisma 的 statement_cache_size 默认 1000;给出 execute/query 协议差异、unprepare 与 statement.close 的适用边界,以及用 performance_schema 聚合、processlist 映射、KILL 后计数归零、tcpdump 抓 COM_STMT_PREPARE 把泄漏钉到具体连接的完整路径。
MySQL
1461
prepared-statement
Node.js
mysql2
Prisma
performance_schema
连接数
MySQL 26.10 把 REST Service 塞进 server:省掉 Router 进程后,故障域和四段版本号都要重算
编程
MySQL 26.10 把 REST Service 塞进 server:省掉 Router 进程后,故障域和四段版本号都要重算
2026-11-02 21:07:23
MySQL 26.10 把 REST Service 变成 server 内的 component,不再必须单独跑 MySQL Router:拓扑少一个进程,也少了故障隔离,worker/连接数/请求大小改按数据库实例规划。另讲四段版本号对监控脚本的坑(VERSION() 仍三段,取完整版本要用 VERSION_WITH_UPDATE)、Health Monitor 进 CE 与 Connector/C++ 移除 compat RPM。
MySQL
数据库运维
版本升级
Go 的 sql.Stmt 与连接池:为什么句柄数约等于连接数乘 SQL 文本数
编程
Go 的 sql.Stmt 与连接池:为什么句柄数约等于连接数乘 SQL 文本数
2026-11-02 00:04:17
Com_stmt_prepare 一直涨、句柄数约等于连接数乘 SQL 文本数,多半不是代码反复 Prepare,而是 DB 级 sql.Stmt 在每条连接上各准备一份。讲清 css 记录机制、interpolateParams 的真实作用域(只影响隐式路径)、Tx.Stmt 反模式,以及先收敛 SQL 文本再调连接池的处置顺序。
prepared
statement
Go
database
sql
MySQL
连接数
Connector/J 预处理没走服务端:useServerPrepStmts 默认 false,缓存上限 25/256 怎么改
编程
Connector/J 预处理没走服务端:useServerPrepStmts 默认 false,缓存上限 25/256 怎么改
2026-11-02 00:03:53
general_log 里只有 Query 没有 Prepare、Com_stmt_prepare 不涨?多半是 Connector/J 的四个默认值:useServerPrepStmts=false、cachePrepStmts=false、prepStmtCacheSize=25、prepStmtCacheSqlLimit=256。给判据、互斥关系、useCursorFetch 隐式覆盖与验证步骤。
MySQL
preparedstatement
JDBC
Connector
J
Java
statement
MySQL 8.4.13:漏掉的 OR 分支、gtid_executed 空洞与过期 AHI 条目
编程
MySQL 8.4.13:漏掉的 OR 分支、gtid_executed 空洞与过期 AHI 条目
2026-11-01 21:02:25
MySQL 8.4.13 里几条「语句正常执行、结果却不对」的修复:index_merge_union=off 时 OR 查询漏一个 disjunct 返回空集、XA RECOVER 与 GTID 可见顺序颠倒、binlogless 副本 FLUSH PRIVILEGES 在 gtid_executed 留空洞、过期 AHI 条目让点查读到已 discard 代际。附复现与验证方法。
MySQL
数据库
复制
优化器
ProxySQL 复用被一条 SET @x 永久关掉:GET_LOCK、SQL_CALC_FOUND_ROWS、文本 PREPARE 的复位条件
编程
ProxySQL 复用被一条 SET @x 永久关掉:GET_LOCK、SQL_CALC_FOUND_ROWS、文本 PREPARE 的复位条件
2026-11-01 00:05:58
应用侧几百个连接,ProxySQL 后端连接数也接近 1:1,说明复用等于没开。按"可恢复 / 永久"两类拆开禁用条件:活跃事务与表锁可恢复,而 SET @x、GET_LOCK()、SQL_CALC_FOUND_ROWS、CREATE TEMPORARY TABLE、文本协议 PREPARE 一旦出现就在该连接上永久失效。附 stats_mysql_processlist 的 extended_info 字段定位法、rules.multiplex 与 keep_multiplexing_variables 调优,以及 OFFLINE_SOFT 残留连接陷阱。
ProxySQL
MySQL
数据库代理
连接池
性能调优
运维排错
prepared
客诉工单 SLA 计时的三处实现错误:工作日 deadline、暂存停表、重复告警
编程
客诉工单 SLA 计时的三处实现错误:工作日 deadline、暂存停表、重复告警
2026-11-01 00:05:38
自建客诉工单系统里 SLA 最容易写错的三处:工作日口径不能 created_at 加小时、暂存与退回期间要用暂停区间累减而不是打标记、超时告警要靠 (ticket_id, level) 唯一键幂等。给出 biz_calendar 日历表、ticket_pause 区间表、ticket_alert 告警表结构与对账 SQL,并划清 UTC 存储、不用 NOW()、deadline_at 落列建索引这些边界。
客诉处理
工单系统
MySQL
SLA
运维
规则写了,SELECT 仍落到 default_hostgroup:ProxySQL 规则链语义与 fast_routing 的指针残留
编程
规则写了,SELECT 仍落到 default_hostgroup:ProxySQL 规则链语义与 fast_routing 的指针残留
2026-11-01 00:04:43
ProxySQL 里规则配了却不生效,SELECT 仍落到 default_hostgroup,不可达时报 ERROR 9001。拆开两种原因:flagIN/flagOUT/apply 的链式语义(初始 flag=0、flagOUT 仅命中时打标、apply 仅命中时终止、catch-all 不能设 destination_hostgroup),以及 3.0.x 未命中时 qr 指针残留导致静默跳过 fast_routing(#5620 / PR #5763 一行修复)。附 stats_mysql_query_digest 落点自查与 8 步排错顺序。
ProxySQL
MySQL
数据库代理
读写分离
查询规则
运维排错
MySQL 多线程复制延迟排查:worker 没并行、WRITESET 回退、大事务各查什么
编程
MySQL 多线程复制延迟排查:worker 没并行、WRITESET 回退、大事务各查什么
2026-11-01 00:03:57
replica_parallel_workers 设成 8 延迟照样涨时,按五类分型排查:conflict 依赖太密、WRITESET 因无主键或外键回退、preserve_commit_order 的提交顺序等待、单个大事务占住 worker、worker 过载与 DDL 串行。附 performance_schema 表字段、版本默认值与判据。
复制延迟
MySQL
并行复制
主从复制
MTS
数据库运维
PHP 8.6 的 quote_string():real_escape_string() 在 NO_BACKSLASH_ESCAPES 下失效的原因
编程
PHP 8.6 的 quote_string():real_escape_string() 在 NO_BACKSLASH_ESCAPES 下失效的原因
2026-10-31 21:04:32
real_escape_string() 只转义不加引号,一旦连接启用 NO_BACKSLASH_ESCAPES,反斜杠不再是转义符,拼接进引号里的值就能提前闭合。PHP 8.6 的 mysqli::quote_string() 把转义和加引号合并,并按连接 sql_mode 选风格。文中给出两种模式下的 SQL 对照、grep 排查命令、替换时的重复加引号与缓存陷阱,以及为什么预处理仍是首选。
PHP
MySQL
安全
SQL注入
版本升级
ASH
DDM 建库时 shard_number 怎么算:shard_unit × RDS 数,扩容要走预校验→切路由→清理
编程
DDM 建库时 shard_number 怎么算:shard_unit × RDS 数,扩容要走预校验→切路由→清理
2026-10-31 00:05:51
DDM(分布式数据库中间件)兼容 MySQL 协议,但逻辑库分片数在 CreateDatabase 时就按 shard_unit 与关联 RDS 数算定:shard_unit × RDS 数,留空则落在 RDS 数到 RDS 数×64 之间。分片变更不是一条语句,而是预校验、异步取结果、切路由、清理四步;应用侧则要守 DDM EXPLAIN、广播表/ER 分片/Share Join 与跨库多表禁写这几条边界。
DDM
分库分表
MySQL
华为云
分布式数据库
pt-table-sync 修复侧:先 --dry-run --print,再决定改源还是改副本
编程
pt-table-sync 修复侧:先 --dry-run --print,再决定改源还是改副本
2026-10-31 00:05:03
pt-table-sync 会直接写数据,方向选错就是改坏源库。本文只讲修复侧:为什么必须先 --dry-run --print、--replicate 与 --sync-to-source 两种模式各改在哪一端、同一源上其它副本会收到变更这个副作用、无主键或唯一键时 REPLACE 退化为 INSERT 只能改副本、source-source 的正确与错误写法、唯一键冲突被自动改写成 DELETE+REPLACE、外键级联与 chunk 控制,以及退出码 2 不是失败。
pt-table-checksum
pt-table-sync
MySQL
主从一致性
复制
运维
PerconaToolkit
WAIT_FOR_EXECUTED_GTID_SET 当探针用:三个位置会返回 0,但复制并没有追平
编程
WAIT_FOR_EXECUTED_GTID_SET 当探针用:三个位置会返回 0,但复制并没有追平
2026-10-31 00:04:32
把 WAIT_FOR_EXECUTED_GTID_SET 从应用层同步点改成旁路探针时,三处会返回 0 却并未追平:探针连到主库、用从库自己的 gtid_executed 自证、驱动类型让 NULL 变 0。附心跳表探针写法、三态指标口径,以及心跳事件不产生 GTID 导致空闲期无法判断链路的问题与权限受限时的替代判据。
WAIT_FOR_EXECUTED_GTID_SET
MySQL
主从复制
GTID
复制延迟
监控
pt-table-checksum 卡在启动:找不到副本、选错通道、复制过滤拒跑这三类先排除
编程
pt-table-checksum 卡在启动:找不到副本、选错通道、复制过滤拒跑这三类先排除
2026-10-31 00:04:05
pt-table-checksum 敲下去就退出、或者挂住不动,多数不是数据问题。本文只讲启动阶段:默认 processlist+hosts 发现副本失败时怎么用 --recursion-method=dsn 指定、多源复制为何必须给 --channel、存在 replicate-ignore-db 时工具直接拒跑与 --no-check-replication-filters 的真实边界、源端与副本各需要哪些权限、副本延迟或复制停止导致的安静等待及 --max-lag/--check-interval 取舍,附 --explain 预检、--replicate-check-only 复用结果与现象-原因-处置对照表。
pt-table-checksum
MySQL
复制
PerconaToolkit
运维
主从一致性
数据校验
PDO 持久连接的状态残留:跨请求的事务、游标与预处理语句怎么排查
代码
PDO 持久连接的状态残留:跨请求的事务、游标与预处理语句怎么排查
2026-10-30 21:09:35
持久连接省下握手开销,代价是事务、游标、预处理语句都跨过了请求边界:销毁一个持久实例会回滚另一个实例仍在用的事务,execute() 失败后旧结果仍可读。按状态残留位置逐项拆,并给出 inTransaction、closeCursor、rowCount 的排查顺序。
PHP
MySQL
PDO
数据库
加密字段要支持子串搜索:trigram 盲索引能救 LIKE,但两个汉字搜不到
编程
加密字段要支持子串搜索:trigram 盲索引能救 LIKE,但两个汉字搜不到
2026-10-29 00:04:28
加密字段上 LIKE '%kw%' 查不了,整值 HMAC 盲索引只解决等值。这篇把子串检索这一层拆开:trigram 写窗口 + HMAC-SHA256 截断 128 位存 token 表、域分离前缀、Exact/Prefix(n)/Ngram(n) 三种形态的取舍、"'abcd' 与 'cdef' 共享 'bcd'" 这类假阳性为什么在密文侧消不掉、短于 3 字符直接跳过索引、异步重建带来的几分钟滞后、多 key 轮换时的双算,以及中文场景 n=3 失效要换 bigram 的代价。
盲索引
加密字段
可搜索加密
HMAC
trigram
MySQL
PHP
Go
advisory lock 的两套键空间和 40P01:bigint 与 (int4,int4) 不互通,死锁要从 pg_locks 反查
编程
advisory lock 的两套键空间和 40P01:bigint 与 (int4,int4) 不互通,死锁要从 pg_locks 反查
2026-10-29 00:03:51
PostgreSQL 咨询锁的 bigint 与 (int4,int4) 两套键空间并不互通,混用等于两把锁;给出 pg_locks 里 classid/objid 按无符号反解 key 的写法、40P01 死锁的复现与定位查询,并对照 MySQL GET_LOCK 只有会话级、死锁错误不回滚事务的差异。
advisorylock
advisory-lock
PostgreSQL
MySQL
咨询锁
pg_locks
PDO 连 MySQL 默认是模拟预处理:prepare 不报 1146,LIMIT '10' 却报 1064
编程
PDO 连 MySQL 默认是模拟预处理:prepare 不报 1146,LIMIT '10' 却报 1064
2026-10-29 00:03:49
PDO_MYSQL 默认用模拟预处理:prepare() 不与服务器通信,所以表不存在要到 execute 才报 1146;execute([10]) 拼成 LIMIT '10' 直接 1064。整理四个可复现差异(校验时点、LIMIT 绑定、同名命名参数 HY093、N 前缀失效)、用 Com_stmt_* 计数器确认是否真的走了原生预处理,以及 PHP 8.4 占位符解析器与 8.5 常量迁移。
PHP
PDO
MySQL
prepared-statement
预处理语句
ingestr 把 MySQL 订单表按天搬进 DuckDB:默认 replace 和增量策略的取舍
编程
ingestr 把 MySQL 订单表按天搬进 DuckDB:默认 replace 和增量策略的取舍
2026-10-28 21:32:18
ingestr 用一条命令在 MySQL/Postgres/DuckDB/BigQuery 之间搬表。默认策略是 replace(整表替换),按天对接要显式用 delete+insert 并给出区间键;merge 在 ClickHouse、DynamoDB 等目标端没有 SQL match 条件,不接受 incremental-predicate。含并行抽取、脱敏、schema 契约与 FSL 许可证边界。
ingestr
数据同步
增量加载
MySQL
DuckDB
CLI
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
下一页
共 7 页
到第
页
确定