程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
MySQL 相关技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
加密字段要支持子串搜索: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
用 tbls 把数据库文档纳入 CI:diff、lint 与覆盖率的实际用法
编程
用 tbls 把数据库文档纳入 CI:diff、lint 与覆盖率的实际用法
2026-10-28 21:31:29
tbls 是 Go 写的单二进制工具,从 MySQL/PG 的活库生成 Markdown schema 文档。本文给最小 .tbls.yml、tbls diff 只比 Markdown 的坑(列顺序、--force 不删旧表文件)、lint 规则与 coverage 的真实适用边界,以及在 CI 里当 schema 漂移守门员的接法。
tbls
数据库文档
CI
schema
MySQL
PostgreSQL
Go
MySQL 9.7 升级前先清账号:native_password 在 9.0 就没了,原地回滚也不行
编程
MySQL 9.7 升级前先清账号:native_password 在 9.0 就没了,原地回滚也不行
2026-10-28 00:05:38
8.4 升 9.7 最常见的翻车不在服务器启动,而在账号:mysql_native_password 从 9.0.0 起已从服务端移除,hash 无法换算只能重设密码,JDBC/Go 非 TLS 连接还要处理公钥交换。同时 9.7 降回 8.4 只支持逻辑导出或复制回滚,不能原地换二进制,给升级前的检查清单与回滚约束。
MySQL9.7
MySQL
认证插件
caching_sha2_password
LTS升级
数据库迁移
Percona Server 与 MySQL 官方版 thread pool 实测:2560 连接下 371 对 122 TPS,buffer pool 32G 后结论反转
综合
Percona Server 与 MySQL 官方版 thread pool 实测:2560 连接下 371 对 122 TPS,buffer pool 32G 后结论反转
2026-10-27 21:04:23
同源的 thread pool,在两套实现里表现完全不同。实测数据说明:数据集放不进 buffer pool 时 Percona 更快,能完全缓存时 MySQL 反超;2560 连接下 pool 把 TPS 从 122 拉到 371,低并发时则没有收益。
MySQL
性能测试
运维
MySQL 指标报出异常后:从 OpenTelemetry 面板走到 Performance Schema 证据
综合
MySQL 指标报出异常后:从 OpenTelemetry 面板走到 Performance Schema 证据
2026-10-27 21:03:27
仪表盘只能告诉你「有变化」,根因还得回 MySQL 收证据。给出一张症状到证据的对照表,以及从行锁等待指标到 data_lock_waits、再到当前 SQL 的两步查询,顺带列出五个常见的排查错误。
MySQL
运维
监控
MySQL 里跑 JavaScript 不是让你把业务搬进数据库:Percona 的 component_js_lang 只补 SQL 缺的那几步
编程
MySQL 里跑 JavaScript 不是让你把业务搬进数据库:Percona 的 component_js_lang 只补 SQL 缺的那几步
2026-10-26 21:06:52
Percona 的 component_js_lang 让 MySQL 8.4 里能写 V8 JavaScript 函数,但引擎砍掉了网络、文件、npm 和 async,只留纯函数。这篇讲它真正补的是 SQL 表达不了的几步:未知形状递归、数组、29 位大整数、带聚合的迭代,并用四个 demo 的实测数字说明边界与授权方式。
MySQL
数据库
JavaScript
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
案例
PXC 升到 8.0 后每 30 秒一阵巨量磁盘写:Linux 大 folio 遇上 mmap 的 Galera cache
2026-10-26 21:05:55
PXC 5.7 升 8.0 后各节点每 30 多秒爆发几 GB 磁盘写,MySQL 统计却解释不了。责任线程全落在 Galera 接收与应用线程上,真因是操作系统同时升到内核 6.1:大 folio 加 mmap 写回只能整 folio 刷盘,而 Galera cache 正是 mmap 文件。文里给线程写入占比、自查命令与五种 workaround。
MySQL
运维
Linux
性能排查
部分退款被并发退超:把「已退 + 在途」扣在一条条件更新里
代码
部分退款被并发退超:把「已退 + 在途」扣在一条条件更新里
2026-10-26 09:02:23
客服退 100、补偿 worker 退全款,两边并发提交,本地 refunded_amount 最后变成 400。问题不在通道,而在额度是等 SUCCESS 回来才累加。本文给出一套顺序:先用条件更新占住「已退 + 在途」额度,再调退款接口,回执只做带状态门的结算;附占位/结算/释放三段 SQL、三个反模式,以及部分退款 50 次上限、1 分钟间隔、NOT_ENOUGH 不该记成已退这几个通道侧限制。
微信支付
退款
并发控制
条件更新
对账
支付对接
MySQL
乐观锁冲突率接近 0,脏写却仍在发生:一条没推进 version 的 UPDATE 让整套 CAS 静默失效
编程
乐观锁冲突率接近 0,脏写却仍在发生:一条没推进 version 的 UPDATE 让整套 CAS 静默失效
2026-10-26 00:05:11
乐观锁的完整性不取决于并发高低,而取决于每条写入路径是否都推进 version。运维手工 UPDATE、老服务、ORM 全量写回、批量脚本只要漏一条,版本号就停滞,下一个 CAS 会静默覆盖刚写入的数据。本文给出 MySQL BEFORE UPDATE 触发器强制推进的写法(OLD.version+1 vs NEW.version+1 的差别)、先用审计触发器诊断再强制的顺序,以及 PostgreSQL 抛异常版本与取舍。
乐观锁
MySQL
触发器
并发控制
CAS
version
行版本
同一条 UPDATE,Go 返回 0、Node 返回 1:MySQL 的 changed 与 matched 不是一回事
编程
同一条 UPDATE,Go 返回 0、Node 返回 1:MySQL 的 changed 与 matched 不是一回事
2026-10-26 00:03:57
乐观锁判定踩的坑多半不在 version 字段,而在 affected-rows 语义:MySQL 默认返回实际改动行数,带 CLIENT_FOUND_ROWS 才返回匹配行数。同一个 0 既可能是"没匹配到"也可能是"值没变"。本文对照 go-sql-driver、mysql2、JDBC 的默认值差异,给出 Go 侧判定、连接池拆分与抖动重试写法。
乐观锁
MySQL
并发控制
CAS
Go
RowsAffected
clientFoundRows
MySQL 26.10 让 EXPLAIN TREE 和 JSON v2 输出显示分区裁剪结果
编程
MySQL 26.10 让 EXPLAIN TREE 和 JSON v2 输出显示分区裁剪结果
2026-10-25 21:04:46
MySQL 26.10.0 让迭代器版 EXPLAIN 也能看到分区裁剪:FORMAT=TREE 与 EXPLAIN ANALYZE 把分区名写进操作文本,JSON v2 给 partitions 数组,传统 EXPLAIN 与 JSON v1 不变。附 RANGE 分区表五步自查流程与「计划期候选读集」的边界。
MySQL
EXPLAIN
分区
优化器
MySQL 版本号变成四段,VERSION() 还返回三段:巡检、CMDB 和备份命名要改哪几行
编程
MySQL 版本号变成四段,VERSION() 还返回三段:巡检、CMDB 和备份命名要改哪几行
2026-10-25 20:02:43
MySQL 开始支持四段版本号 MAJOR.MINOR.PATCH.UPDATE,但 VERSION()、@@version、握手包和数字版本 ID 仍保持三段语义。结果是巡检、CMDB、备份命名、发布核对这些靠解析版本号的脚本区分不出同一 patch line 上分批交付的 update。本文给出 VERSION_WITH_UPDATE()、@@version_with_update、mysqld --version-with-update 三种取法,以及老实例上的兜底探测写法。
MySQL
运维
版本管理
巡检脚本
升级
MySQL 报 1461 不是连接数问题:max_prepared_stmt_count 的 16382 配额被谁吃掉了
编程
MySQL 报 1461 不是连接数问题:max_prepared_stmt_count 的 16382 配额被谁吃掉了
2026-10-25 00:05:49
MySQL 报 1461 时先别急着调大参数:max_prepared_stmt_count 是 mysqld 全局配额(默认 16382,每条至少 8KB),一个连接就能吃光。按五类消耗形态分型,给出 Prepared_stmt_count、Com_stmt_* 差值与 performance_schema.prepared_statements_instances 的定位顺序,以及 PHP PDO 默认 emulate 下调大也无效的边界。
MySQL
max_prepared_statements
prepared
statement
preparedstatement
1461
数据库运维
连接池
RDS MySQL 连接数打满连不上:先分空闲会话与活跃堆积两条线
编程
RDS MySQL 连接数打满连不上:先分空闲会话与活跃堆积两条线
2026-10-25 00:03:50
RDS MySQL 报 ERROR 1040 连不上,先看 mysql.active_session 分型:总连接高、活跃低是空闲连接(连接池初始值过大、短连接没 close、会话带 CLIENT_INTERACTIVE),两者一起高才是慢 SQL、MDL、行锁、CPU/IOPS 堆积。附 wait_timeout 默认 86400 与 interactive_timeout 默认 7200 的生效边界、打满时的控制台自救顺序,以及连接池留 10 个连接给 DMS 的配置片段。
RDS
MySQL
连接数
云数据库
数据库运维
阿里云
binlog 序号跨过 999999 后,半同步复制会静默变回异步
编程
binlog 序号跨过 999999 后,半同步复制会静默变回异步
2026-10-24 21:04:20
半同步复制跑久了,binlog 文件名后缀会从 6 位变成 7 位(mysql-bin.1000000)。这时复制协议会静默退回异步:不报错、日志干净、rpl_semi_sync_source_status 仍然是 ON,但提交不再等 replica 的 ack。本文给出复现与确认顺序、比状态变量更可靠的监控口径,以及升级时的默认值连带影响。
MySQL
复制
故障排查
割接前的 pt-table-checksum:报出的 DIFF 有一半是假阳性,先分清工具边界再修数据
编程
割接前的 pt-table-checksum:报出的 DIFF 有一半是假阳性,先分清工具边界再修数据
2026-10-24 00:05:46
割接前跑 pt-table-checksum 输出几百行 DIFF,不等于数据坏了。本文讲清它的工作机制(只在源端执行、靠复制流到副本重放)、CRC32 碰撞与 chunk 切分、binlog_format 与 ROW 副本导致校验走不通的边界,以及 TIMESTAMP 时区、collation、浮点精度、并行复制错位这些假阳性来源;附不一致结果的分型处理表与只读校验命令。
数据库割接
MySQL
数据校验
pt-table-checksum
数据库迁移
复制
运维
MySQL 写后读仍是旧值:Seconds_Behind_Source 判不准,改用位点/GTID 等待
编程
MySQL 写后读仍是旧值:Seconds_Behind_Source 判不准,改用位点/GTID 等待
2026-10-24 00:04:53
读写分离下写后立刻读到旧值,而 Seconds_Behind_Source 判不出这笔写是否已落到从库:讲清它在五种场景下为什么失真、performance_schema 原始提交时间戳怎么看真实水位、SOURCE_POS_WAIT 与 WAIT_FOR_EXECUTED_GTID_SET 的返回值语义、主库 GTID 怎么带到读侧,以及超时回落与等待堆积的代价。
读写分离
MySQL
主从复制
GTID
复制延迟
WAIT_FOR_EXECUTED_GTID_SET
数据库
队列
停写没停干净就切库:MySQL/PG 割接窗口的位点判定、追平阈值与回滚预算
编程
停写没停干净就切库:MySQL/PG 割接窗口的位点判定、追平阈值与回滚预算
2026-10-24 00:04:16
割接窗口里真正决定成败的是四件事:源端停写是否彻底、增量链路是否追到最后一个事务、反向链路何时启动、回滚还有多少时间。按华为云 DRS、腾讯云 DTS 与 AWS 割接口径整理可执行命令:read_only 与 super_read_only 的差别、show master status 与 binlog events 抽查、processlist 里 Sleep 连接不算写入、长事务导致假追平、GTID 子集与 pt-heartbeat 判据,另附按分钟计的操作清单。
数据库割接
MySQL
PostgreSQL
数据库迁移
割接窗口
binlog
回滚
运维
MySQL 9.7 企业版动态脱敏:列上挂 MASKING POLICY 后,WHERE、索引和导出都得重算
编程
MySQL 9.7 企业版动态脱敏:列上挂 MASKING POLICY 后,WHERE、索引和导出都得重算
2026-10-24 00:04:04
MySQL 9.7 企业版动态数据脱敏(DDM)的落地笔记:masking policy 装在 object_policy 组件上,查询解析阶段把脱敏列替换成 CASE 表达式,写入不受影响。整理组件安装与专用 schema 的取舍、CASE 语法与两个 gatekeeper、四类挂载写法、七条限制及其后果(不能建索引/分区键/生成列/CHECK),给出按序排查清单,并标出 WHERE 走掩码值、导出拿掩码数据等需自测的推导结论。社区版无此功能这一硬约束单独说明。
数据脱敏
MySQL
动态脱敏
DDM
数据库安全
MySQL9.7
脱敏策略
DISCARD 不是万能重置:PostgreSQL、Redis、MySQL 清理会话状态的边界与代价
编程
DISCARD 不是万能重置:PostgreSQL、Redis、MySQL 清理会话状态的边界与代价
2026-10-23 00:03:47
连接池归还连接时该跑哪条重置命令?拆开 PostgreSQL DISCARD ALL 的等价语句,指出 RESET ALL 回到会话启动值、不能在事务块内(25001)、DISCARD SEQUENCES 造成序列空洞、DISCARD PLANS 清空计划缓存的代价;对比 Redis 的 DISCARD 与 6.2 的 RESET、MySQL 的 COM_RESET_CONNECTION,并给 PgBouncer 池化模式下的取舍与上线检查清单。
DISCARD
PostgreSQL
Redis
MySQL
连接池
会话状态
队列
MySQL 9.7.4 收紧 EXCHANGE PARTITION:两边 CHECK 都要过,交换前先跑一条 SELECT 预检
编程
MySQL 9.7.4 收紧 EXCHANGE PARTITION:两边 CHECK 都要过,交换前先跑一条 SELECT 预检
2026-10-22 21:02:17
MySQL 9.7.4 之后 EXCHANGE PARTITION 会双向校验 CHECK 约束,生成列定义不一致直接拒绝,报 ERROR 3819。说明 WITHOUT VALIDATION 只跳过分区边界、不跳过 CHECK,并给出生成列比对、交换前 SELECT 预检与失败后的回退判断。
MySQL
分区表
DDL
约束校验
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
下一页
共 6 页
到第
页
确定