鸿蒙开发者必学的MySQL运维设计实战
|
凌晨三点十七分,告警声像指甲刮黑板,三台主库的复制延迟跳到四百秒——不是告警平台误报,是DBA老周自己用curl敲了十遍show slave status,最后一遍回车前,他把手机倒扣在机柜边缘,屏幕朝下,光还是漏出来。我原以为鸿蒙开发者只配碰SQLite那种小玩意儿,结果去年九月份,他们真把MySQL 8.0.33塞进一个叫“分布式协同数据库服务”的模块里,还敢开binlog_row_image=FULL。冷气从机房下送风口直吹我后颈,凉得我缩了一下肩,可那股凉不是舒服,是错觉——空调嗡的一声低频震颤,震得我左耳耳膜发痒。 SSH连上去第一件事不是查slow_log,是看ps aux | grep mysqld的RSS列。三台里面两台RSS涨到2.1G,但没人动内存限制参数,因为鸿蒙那边说“咱们是轻量内核适配”,结果MySQL在轻量内核上硬跑DDL重放。我盯了十八秒那个replica_sql_running_state字段:waiting for handler commit。不是waiting for master to send event,是卡在handler commit。这种卡,你改max_allowed_packet没用,调innodb_flush_log_at_trx_commit也没用——它压根没走到flush那步。老周蹲在机柜旁啃包子,酱汁滴在工装裤上,他抹了一把嘴,说:“这不像主从断了,像人被点了穴。” 优胜劣汰?对。真淘汰。上个月上线的那个“设备画像同步表”,建表语句里写了JSON字段存离线行为,还加了Generated Column索引。我盯着explain看它用上没用上索引看了七分钟,最后发现它根本没走索引——优化器选了全表扫描,只因那个JSON_CONTAINS谓词落在WHERE里带了个OR。后端小张提了个PR想把OR拆成UNION ALL,被鸿蒙侧驳回,理由是“不符合原子服务能力契约”。我就笑,笑完把咖啡端起来喝了一口——结果手抖,褐色液滴斜着甩出去,刚好落在工牌左下角,像一小块凝固的瘀伤。现在那块渍还在,洗不掉。 这事最荒的是,他们连GTID都不开,非要用file+pos。我说“至少开gtid_mode=ON吧”,鸿蒙那边回邮件:“POS位点可追溯,更符合确定性执行范式。”我回了个“OK”,然后把那封邮件转发给DBA老周,抄送老板。老板当天下午三点零七分进机房,没穿鞋套,直接踩过防静电地垫边缘那道胶条,鞋底粘起一根黑灰毛絮,飘到第三排机柜底下。他指着监控屏说:“这延迟曲线得压平。”我说:“压平也得等它先跑起来。”他点头走了,手机响了一声没接,屏幕亮了半秒,锁屏壁纸是孩子踢球的照片。
文章配图,仅供参考 我原以为他们最多写个JDBC连接池封装,结果人家真在Native层重写了mysql_native_password插件的认证握手流程——为了兼容鸿蒙的Secure Element模块。结果呢?握手多耗时三百七十二条告警里,有三百六十九条发生在TLS协商后的第一个query packet。我敢打包票:这不是加密慢,是他们把SHA-256校验挪到用户态做,还忘了关CPU频率调节。这个我说不准,但上周我把/sys/devices/system/cpu/cpu/cpufreq/scaling_governor全改成performance之后,延迟抖动收敛了七成。至于为啥只收敛七成?因为剩下三成卡在InnoDB的btr_cur_search_to_nth_level函数里——那堆自适应哈希索引重建逻辑,在ARMv8.2的LSE指令集下面,偶发死锁。我们测过,复现条件是三个线程同时update同一行的两个不同JSON字段,再加一个select for update……(停顿)算了,这事儿我不讲透,反正已经让测试组把那个场景写进混沌测试用例集第十二版了。昨天值完夜班去食堂,刷饭卡时机器卡住,提示“身份验证失败”,连续五次。我盯着那个红色感叹号,忽然想到,鸿蒙的数据库连接鉴权,好像也是用类似机制——用本地证书签名nonce,再base64传到MySQL proxy。当时觉得酷,现在看,跟这台饭卡机一个毛病:证书链校验超时就直接拒绝,连退路都不留。值班表上我这周排了三次后半夜,可人事系统里我的调休申请被驳回了,理由是“系统维护窗口期内无法释放资源”。谁批的?技术委员会那个穿洞洞鞋的老李。今早来机房,他果然换了双新拖鞋,灰色,前端露脚趾,后跟带软胶垫,走路没声。我数了数,他从B2机房走到A区监控台,一共十六步,右脚第二步比左脚多碾了一下地板缝。 所以别跟我谈“鸿蒙适配最佳实践”,不存在。只有“这次活下来了”的快照。我现在每天早上八点准时开一个screen会话,里头挂着tail -f /var/log/mysql/error.log和watch -n 1 'mysql -e "show processlist" | wc -l'。不为监控,就为听那个每秒刷新的“哒”声——硬盘灯闪一下,我心落一格。要不要把那套SQL审核脚本开源?先等等。上周有个新人用它扫出三十四处JSON_EXTRACT没加IFNULL,结果他顺手改了,改完没做数据迁移校验,直接上线……算了,这事我不提了。你要是刚接手鸿蒙那边的数据库联调,记住一点:永远在凌晨两点跑一遍alter table add column json_col json default null,别信文档里写的“online DDL支持JSON类型”。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


鸿蒙电商新政落地,监管升级倒逼数据合规转型
你的网站还在用点击跳转?11年运维工程师告诉你该升级了
鸿蒙工程师跨界创业:11年运维老兵的资源整合实战