加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.023zz.com.cn/)- 高性能计算、物联设备、数据可视化、操作系统、基础存储!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL高可用运维设计:站长全栈实战路径

发布时间:2026-11-06 11:29:40 所属栏目:MySql教程 来源:DaWei
导读:  凌晨三点二十,我盯着监控屏右下角那个绿色小点——ping通的,但MySQL进程早不在ps里了。值班室空调嗡嗡响,泡面桶还歪在桌角,汤渍干成一圈浅黄边。隔壁机房风扇声突然变调,像有人用指甲刮黑板,刮了四十来分钟。  我原

  凌晨三点二十,我盯着监控屏右下角那个绿色小点——ping通的,但MySQL进程早不在ps里了。值班室空调嗡嗡响,泡面桶还歪在桌角,汤渍干成一圈浅黄边。隔壁机房风扇声突然变调,像有人用指甲刮黑板,刮了四十来分钟。


  我原以为只是主库IO卡住,把从库切上来顶一顶就行。结果执行CHANGE MASTER TO那行命令时,终端回显“ERROR 2003”,不是连不上,是根本没走TCP三次握手机制——端口监听都没开。这时候才看见备份脚本最后一行日志:”2023-01-21 23:59:58 —— skipped: /backup/mysql/20230121.sh not found“。不是脚本挂了,是整个/usr/local/bin目录被rm -rf过一次,三个月前就没了,只是没人发现。我手抖着翻git log,看到同事老张上周五提交过一条:”删掉废弃脚本(含mysql_backup)“,commit message里写”清理冗余“,后面跟了个笑脸emoji。


文章配图,仅供参考

  DNS解析倒还稳,TTL设的是300秒,但用户报错全是”Connection refused“,没一个提域名。老板在运维大群里发了个截图,是某云监控后台的”服务健康度“曲线,平得像尺子量过,底下配字:”为什么没告警?“。我没回。因为那张图压根没接入MySQL存活检测,只查了80端口。我盯着它看了三分钟,手指悬在键盘上,最后关了窗口。窗外开始下雨,雨点打在玻璃上不连贯,啪、啪、停顿、再啪。


  磁盘满是第二天下午才发现的。不是df -h报警,是mysqld启动失败后报”No space left on device“,但/dev/sdb1只用了78%。我蹲在机柜前拔掉SATA线重插,听见硬盘咔哒一声,不是机械响,是电路板上某个电容被我手温烘爆了。保修单贴在机箱内壁,字迹被油污糊掉一半,只看清”2022年7月“和”已过保“四个字。工单系统里有个同名case:2022-09-14 提交,标题是”sdb写入异常“,处理人写着我名字,状态栏标着”已解决“。我点进去看回复记录:”客户确认数据无丢失,问题缓解“。可我根本不记得接过这个单。后来问客服小陈,她说那天我电话里说”你先回访用户,我把重启步骤发你“,然后挂了。她真去回访了。用户说”网站又能打开了“,她就点了结案。


  证书过期发生在凌晨四点零七分,Nginx直接拒绝SSL握手。这事本来和MySQL无关,但它触发了前端自动重试逻辑——每个请求间隔缩短到200毫秒,瞬间打穿了代理层。流量图陡然翘起,像有人拿刀劈了一刀。我改完nginx.conf重载配置时,屏幕反光里看见自己眼眶发青,左耳背后有块干皮,不知道什么时候蹭破的。这时候收到老王微信:”你家孩子刚打来电话,说找爸爸听故事。“ 我回”等两分钟“,他秒回”挂了,自己读《小熊维尼》去了“。


  迁移丢数据那次更荒唐。我们用pt-table-checksum比对主从一致性,结果主库binlog_position停在12476309,从库show slave status显示Exec_Master_Log_Pos是12476301,差8字节。我们当场导出这8字节对应的event,hexdump一看,是”DELETE FROM user_sessions WHERE last_active < NOW() - INTERVAL 1 DAY“。八条delete语句。没主键,没唯一索引,WHERE条件靠NOW()——而两台机器时区不一样。主库是CST,从库跑着NTP却死在2022年11月,时间差117分钟。这个我到现在也没想明白为啥NTP服务没告警,连systemctl status ntpd都显示active(running)。


  我去年春节值的班。腊月廿九晚上十一点,老张在群里说”数据库慢,可能要扩CPU“,发了个top截图,%wa高达92。我说”你kill掉那个long_query吧“,他说”已经在跑了,跑完就杀“。他没杀。那条查询跑了十六个小时,占着innodb_buffer_pool 82%的空间,把真正的业务查询全挤出去了。初一早上六点,监控屏上贴的胶布掉了半截,露出底下2022年的标签纸,蓝墨水洇开成一片。我看表,离下一个主从同步窗口还有三十七分钟。三十七分钟够干啥?够重装MySQL,够换硬盘,不够救活那个被锁住的全局读锁。


  最讽刺的是CC攻击那次。真实流量才3Gbps,远没到带宽上限,但每秒新建连接数冲到47万。防火墙规则里还留着2019年写的”封禁恶意UA“,匹配的是”Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)“。攻击包UA字段清一色写着”Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36“。完全合法。规则不生效。我手动封IP段时,发现/proc/sys/net/ipv4/tcp_max_syn_backlog是128——比十年前还小。谁调的?不知道。我改完sysctl -w,敲回车的手指在抖。


  站长全栈实战路径,这词听着体面,其实就俩字:活着。高可用不是架构画出来的,是半夜三点半,你跪在机柜前面,用指甲抠掉散热片上陈年灰尘,听见硬盘在叫,而你忽然想起三年前自己删掉的那条crontab——它本该每天零点清空/tmp下的临时文件,结果因为注释符写成了#而不是# ,整行失效。优胜劣汰?对。活下来的人,不是最懂SQL优化的,是那个发现Nginx access_log轮转配置里$year写成$yea的,是那个在root密码邮件模板里多加了两个空格导致curl无法解析JSON的,是那个把/etc/cron.d/mysql-backup里path变量拼错成/ust/local/bin的。他们赢了,因为他们烂得不够彻底,刚好卡在崩溃临界点之前那一毫米。


  我抽屉里还放着搬家时扔掉的一沓打印纸,上面记着旧服务器IP、RAID卡型号、BIOS升级包MD5。搬家那天雨水太大,纸页泡软了,字迹洇成蓝灰色云团。其中一张右下角写着”备库复制线程延迟超1000秒,需排查relay_log_purge“,日期是2021年4月,后面跟了行小字:”已修复(其实是把监控阈值调到了5000)“。


  明天先把告警阈值调了。

(编辑:站长网)

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