加入收藏 | 设为首页 | 会员中心 | 我要投稿 草根网 (https://www.0518zz.com/)- 智能办公、智能数字人、云手机、专属主机、云备份!
当前位置: 首页 > 教程 > 正文

MySQL运维设计5大坑:90% DBA都栽过

发布时间:2026-11-07 14:31:03 所属栏目:教程 来源:DaWei
导读:  我原以为高考那会儿流量稳得一批,结果活动页加载慢三秒,拉新直接掉到平日的六成——就那个“查分助手”弹窗,连push都卡在MQ里没发出去。  群里一直在@人。李婷刚在打印物料,A4纸卡了两次,她蹲在复印机前撕纸边;饮水

  我原以为高考那会儿流量稳得一批,结果活动页加载慢三秒,拉新直接掉到平日的六成——就那个“查分助手”弹窗,连push都卡在MQ里没发出去。


  群里一直在@人。李婷刚在打印物料,A4纸卡了两次,她蹲在复印机前撕纸边;饮水机在换桶,咕噜咕噜响了快两分钟;我手机电量剩13%,充着线都不敢锁屏,怕漏掉告警短信。


  去年高考期间的事,具体哪天记不清了,反正就是出分前后那三天。我们按着DBA给的方案切了读写分离,主库只写,从库扛查询——结果一上线十分钟,从库延迟飙到27秒,落地页“实时查分进度”那个接口全挂,页面上还挂着昨天凌晨的数据。用户点进去,看到“当前第8623位”,实际是890万位之后……


  王磊非说“这是网络抖动”,拿着tcpdump截图在会议室怼产品,可监控里IO Wait那条线早就捅破天花板了。他后来自己删了三条监控脚本,说是“干扰判断”,结果第二天凌晨三点又爬起来手动 kill 了两个 long query,其中一个是 select from user where mobile like '%138%' ——对,就那个用手机号模糊搜用户的报表SQL,上周才被产品加进AB分流后台。


  我桌上那张手写的排期被茶水浸了,墨迹洇开,“数据库索引优化”那行字现在像团蓝灰色云。其实哪用等到高考——五月底一次小规模券核销压测,insert ignore 用错了表,导致同一用户重复领券三次,技术复盘时谁都不提binlog格式是ROW还是STATEMENT,光扯“业务兜底不及时”。可你翻下当时的error log,第17行就写着:“Duplicate entry 'U20230521XXXX' for key 'uniq_user_time'”,明晃晃的唯一键冲突,愣是没人往下看第18行:“…due to missing primary key on target table”。


文章配图,仅供参考

  这五坑不是玄学,是优胜劣汰筛出来的。不是考你会不会调innodb_buffer_pool_size,是考你敢不敢在预发布环境里删个索引、再手写个alter table online等十个小时。上周二张薇还在说“主从切换脚本跑过三遍没问题”,结果高考当天半夜切换失败,备库relay log里断在一条update语句中间——那句update本身没错,错在它前面那条insert里少了个字段,默认值是NULL,但目标列不允许NULL,于是整个事务卡死。没人检查DDL变更单里的NOT NULL约束是否同步了。


  会议室一直被占着。我和李婷就在茶水间改SQL。她一边搅咖啡一边念:“这个left join能不能换成exists?”,我说“别念了,你刚问的是执行计划还是数据一致性?”她笑了一声,咖啡泼在工牌上,反光刚好照见墙上贴的那张MySQL 5.7生命周期终止公告。


  第二个坑:备份策略当装饰画。全量+binlog是基础,可我们那个“高考专属库”,备份目录权限设成777,上周三运维扫描到有37个备份文件被意外修改时间戳,没人去追是谁touch的。第三个坑:监控只配阈值不配上下文,CPU超过90%就告警,可那会儿正批量导入查分学校名单,top里mysqld占94%,告警邮件写了23封,谁点开过第五封里的processlist截图?第四个坑最蠢——用pt-archiver归档,参数没加--no-check-plan,结果归档过程中optimizer选错执行计划,把生产库拖慢了十七分钟,而归档脚本里sleep间隔写的是“随机0.3-0.8秒”,真随机,没种子。


  第五个……算了,第五个是心理问题。每次大促前DBA都会重新review所有连接池配置,可没人管应用层那堆Connection对象有没有close。高考那晚我盯着ARMS里一个Java服务的DB连接数,稳定在397,但maxActive明明设的是400。我就盯了五分钟,它就没涨过。直到凌晨一点,它突然跳到401,紧接着404,再然后整个服务开始报Connection refused。查代码发现——那段取用户画像的逻辑,用了try-with-resources,但里面嵌套了个mybatis的selectList,而那个mapper.xml里resultMap写了collection标签,没配fetchType="lazy",于是每次查询都触发N+1,connection被占住,却没超时释放。不是数据库的问题,是我们不敢关掉那个collection。


  我原以为改完这段就能稳了,结果改完上线三小时,用户留存曲线掉得比去年高考数学题解析视频的完播率还狠。王磊说我太依赖“可视化慢查询平台”,可那平台根本看不出跨库join时中间件怎么分片的。他后来把慢查日志导出来,用awk写了段脚本,跑了四十分钟,最终圈出一个union all里的子查询,那个子查询在从库上执行走了全表扫——因为它没用到联合索引的最左前缀,而建索引的人,去年离职前最后一周,填的工单理由是“临时需求,先跑通”。


  老板上周问我周报里“技术债清零进展”怎么写,我说“已拆分为12项,其中7项待评审”,他说“评审定在哪天?”,我说“还没约,李婷在等张薇空出下午两点半”。他说好,转身进了财务部会议室。我回来打开Jira,发现那12项里有5项,状态还是“open”,创建人写的是“system”,时间戳是三年前。


  下次大活动前,我准备把手写的排期重抄一遍,用签字笔,别碰水。另外得提醒李婷,打印前先关掉Excel里的“自动填充颜色”功能,上次她打出的券码列表,第二列背景色没清除,扫码枪扫不出第三行起的数字——这事和数据库无关,但那天凌晨三点,我们所有人,都对着打印机屏幕盯了七分钟。

(编辑:草根网)

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