加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.jiakaowang.com/)- 应用程序、AI行业应用、CDN、低代码、区块链!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

DBA熬夜改表?这本MySQL实战手册搞定设计与运维

发布时间:2026-10-12 14:29:50 所属栏目:MySql教程 来源:DaWei
导读:文章配图,仅供参考  DBA熬夜改表?这本MySQL实战手册搞定设计与运维  去年7月份,我在给某省医保结算系统做分库分表迁移时,凌晨三点蹲在IDC机房改一张6.2亿行的order_detail表——加个非空datetime字段,加了5次都没成功

文章配图,仅供参考

  DBA熬夜改表?这本MySQL实战手册搞定设计与运维


  去年7月份,我在给某省医保结算系统做分库分表迁移时,凌晨三点蹲在IDC机房改一张6.2亿行的order_detail表——加个非空datetime字段,加了5次都没成功。第三次alter被kill掉后,主从延迟飙到28分钟,监控告警电话直接打到我手机上。那会儿我连咖啡都喝吐了,翻出抽屉里这本《MySQL实战手册》,第87页“在线DDL避坑指南”写着:“pt-online-schema-change对二级索引变更失效场景:MySQL 8.0.23+默认启用instant DDL,但仅限于添加列、重命名列;add column with default value在大表上仍触发COPY_TABLE”。——我傻了,原来我们集群用的是8.0.22。赶紧升版,换ALTER TABLE ... ALGORITHM=INSTANT,19秒跑完。


  这本书的新技术含量真高。


  它把MySQL 8.0.33刚合并进main的innodb_deadlock_detect优化策略拆成了三步调试流程图,附带真实死锁日志截图(含thread_id 4207和事务堆栈里那个可疑的XA START语句),还手写标注了“注意:此参数在Percona Server 8.0.32-25已废弃,但社区版8.0.33仍有效”——这种颗粒度,市面上其他书连影子都没有。去年11月我拿它去救一个金融风控系统的慢查询,用书中第142页教的“覆盖索引反向探测法”,发现他们唯一索引其实是(imei, create_time, status),而查询只用了imei + status,结果走了全索引扫描。改成联合索引(imei, status, create_time)后QPS从132拉到347,但——等等,第二天早上发现insert并发跌了17%,查redo log才发现新索引引发更多page split。手册第145页小字批注突然跳出来:“高频INSERT下,覆盖索引列顺序需让变动最小的字段居前”,我们立刻把status挪到第三位,问题消失。这事我跟三个DBA聊过,没人提过这个细节。


  新技术。


  但书里有个硬伤:第201页讲并行复制的“transaction_write_set_extraction=XXHASH64”配置,在GTID mode下实际要搭配enforce_gtid_consistency=ON且binlog_format=ROW才生效,可它没写清楚。上个月我按图索骥配了一套测试环境,结果从库复制线程卡死在“Waiting for preceding transaction to commit”,日志里全是Retrieved_Gtid_Set为空——折腾了6小时才查到是GTID一致性没开全。这坑太深,连阿里云RDS文档都没明说。所以现在我习惯先扫一眼每章末尾的“实测版本矩阵表”,上面标着8.0.23~8.0.33各功能的兼容性缺口,但矩阵表自己漏掉了这个组合。


  DBA熬夜改表?这本MySQL实战手册搞定设计与运维


  上周五,客户发来一张7TB的click_log表,要加json校验约束并重建分区。运维同事说“直接alter肯定挂”,我翻到手册第307页“JSON字段渐进式上线方案”,照着执行pre-check脚本(附带python3.9写的validate_json.py,能跳过BLOB乱码字段自动标记异常行号),果然揪出2317条非法json。但脚本输出路径写死了/tmp/json_check_XXXXX,客户机器上/tmp是tmpfs,跑了两次就占满内存——我当场改了源码,加了个--output-dir参数,顺手提交了PR。作者回复得很快:“已合入develop分支,下个patch发布。”


  这书不适合当字典查。


  它像一本带着油渍和咖啡印的作战日志。我书页边角记满了字:去年7月份那次医保迁移,在“ALGORITHM=INSTANT”旁边画了个爆炸图标,旁边批“⚠️ only if no fulltext/geom/virtual col”,后面还粘了张便签:“2024.03.12验证:virtual col+instant在8.0.30 crash,已报Bug#114298”。这些不是知识,是血换来的坐标。你要真信了它说“零风险在线改表”,那你得先确认自己的mysql.sock权限是不是比手册里写的还严格——毕竟第11页的chmod示例用的是755,但我们生产环境强制700。我现在习惯每读一节,就去docker里起个对应版本容器跑一遍。昨天试了第266页的“SET PERSIST优化”,在MySQL 8.0.34上发现persisted_variables_table里多出一列variable_source,手册没提,但show variables输出和系统表不一致……这事我还没想明白。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章