加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.0313zz.cn/)- AI硬件、数据采集、AI开发硬件、建站、智能营销!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL高可用实战:36小时从崩溃到稳如磐石

发布时间:2026-10-30 14:07:19 所属栏目:MySql教程 来源:DaWei
导读:  去年五月份,凌晨三点十七分,我盯着监控面板上那个跳成红色的MySQL主节点——它没挂,它就是不响应,像一具睁着眼的尸体。群里李工甩过来一条消息:“查一下收录”,我回了个“嗯”,手指悬在键盘上没敲下去,因为根本没心情敲

  去年五月份,凌晨三点十七分,我盯着监控面板上那个跳成红色的MySQL主节点——它没挂,它就是不响应,像一具睁着眼的尸体。群里李工甩过来一条消息:“查一下收录”,我回了个“嗯”,手指悬在键盘上没敲下去,因为根本没心情敲。窗外在下雨,雨点砸在空调外机上,咚、咚、咚,跟心跳一个节奏。阳台晾着两件衬衫,忘了收,袖子已经湿透贴在栏杆上。


文章配图,仅供参考

  我原以为是备库同步延迟炸了,结果切完读写分离后,首页关键词三百七十二个词,掉了一半。不是缓存失效,不是CDN抽风——是MySQL直接把SELECT FROM seo_keywords这条语句卡死在事务队列里三十七分钟。张薇在运维群发了个捂脸表情包,配字:“又来?”她刚休完产假回来,还没碰过生产库。老周隔着工位喊:“你那站友链列表页怎么还在报503?我这边爬虫日志全是Connection refused。”我没回,只把烟盒翻过来,抖出最后一支,打火机咔哒了四次才着。


  快照退到三月十八号,不是被清空,是倒退——就像搜索引擎拿橡皮擦,从右往左抹,先抹掉四月的,再抹掉五月的前两周,最后停在那个带CSS内联样式的旧版页面上。我知道那版页面连title都拼错了,“SEO优化指南”写成“SEO优花指南”。但那天它居然被快照了,而且活了三天。这事儿我敢打包票,因为我截图发给客户王总时,他秒回:“你们是不是偷偷改了robots.txt?”我翻了Git历史,真没动过。到底是哪次更新的事我说不准,可能是上周二那个没人签字的配置合并,也可能是数据库补丁包自带的触发器bug,反正现在查不到日志,binlog全在主库崩前那十七分钟里烧成了灰。


  隔壁装修的电钻声又响了,上午十点整,雷打不动。我靠在椅子上想当年做站群那会儿,三十台VPS全挂在一个MySQL实例上,半夜定时刷权重,脚本里还写着“sleep 0.8”。那时候没高可用,只有“扛住就行”。后来扛不住了,就换云厂商,换完发现他们集群拓扑图上画着“双活”,点进去看复制模式还是异步,延迟阈值设成三十秒——美其名曰“业务可接受”。呵。现在想想,那三十台站群能撑两年,不是靠架构,是靠搜索算法没抽风。优胜劣汰?真不是修辞。是真有人用读写分离当高可用,用备份当容灾,用重启当故障恢复,最后被干趴下;也是真有人凌晨四点手写failover脚本,一边跑一边改SQL hint,硬把索引量拉回七成。谁活下来了,谁就被筛出来,就这么简单。


  王总第三遍催:“百度站长平台里‘索引量’曲线怎么突然断崖?是不是你们动了sitemap?”我打开浏览器,光标在地址栏反复删改三次才敲出https://zhanzhang.baidu.com,又等了十二秒才加载出页面——不是网慢,是DNS解析在重试。页面出来后我直接滚动到底部,看那个“最近一次抓取时间”,停在五月六号下午四点零三分,后面全是空白。我就盯着那个空白看了半分钟,什么都没干。旁边实习生小陈凑过来问:“老师,要不要我手动submit一批URL?”我摇头,说:“submit了也没用,它不认。”他说:“为啥?”我点了下刷新,页面闪了一下,那个空白还在。“因为它现在不觉得你是站。”


  外链失效最邪门。不是404,是HTTP 200返回了一个纯白HTML,body里只有一行注释:<!-- backup-mysql-down -->。我截图发给友链伙伴老刘,他回:“你这是挂彩蛋呢?”后来才知道,是备库切主后,应用层没及时切换配置,所有写操作都冲向一个不存在的地址,而读请求全落到那台挂了但进程还在的从库上——它干脆返回个静态模板应付着。老刘昨天还发来一条微信:“我首页的‘友情链接’区块崩了,你那边咋回事?”我没回。他那个区块的DOM结构,三年没改过,CSS class还叫frienglink-ul,少个e。


  我其实试过重启从库的slave io thread,试了四次。第一次没报错,但SHOW SLAVE STATUS里的Seconds_Behind_Master疯狂跳数字,一会儿是0,一会儿是2147483647(溢出了)。第二次我加了SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1,跳过一条。第三次我手删了relay-log.index,重生成。第四次……算了,第四次我关了终端,去楼下买了瓶冰啤酒,坐台阶上灌了半瓶。风吹得衬衫袖子鼓起来,湿的,凉得扎人。


  说到底,这次崩溃不是败给技术,是败给耐心。当DBA蹲在凌晨三点核对GTID,而前端还在等一个JSON字段,而SEO同学盯着快照发呆,而客户问“今天能不能好”,而你一边喝啤酒一边看电钻火花溅到对面楼玻璃上——这时候你才明白,所谓高可用,根本不是架构图上那几条线,是你愿不愿意为三十七分钟的延迟,多写两行检测脚本,多留一个应急开关,多记一条失败日志格式。别的都是包装纸。


  明天先把手上那批页面删一半试试。不是优化,是砍掉冗余依赖。砍完了再说。

(编辑:站长网)

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