鸿蒙开发者必修:MySQL运维设计实战
|
“鸿蒙开发者必修:MySQL运维设计实战”——去年国庆那会儿,我们就在需求评审那一刻听见这标题,直接笑出声。小陈手里的白板笔没水了,蹭了半天只留一道灰印,像条快断气的蚯蚓。 老张还在念PRD里第三页那个“本地数据库同步策略兼容HarmonyOS 4.2+”,我盯着他右耳上那颗痣,忽然记起上周他改过三遍schema命名规范,但没人提过一句外键要不要加ON DELETE CASCADE。我原以为只是文档漏了,结果昨天翻Git提交记录,发现删掉的那行注释写着“暂时不考虑级联,怕影响启动速度”,时间戳是八月二十七号凌晨两点四十一——他自己的commit。 空调在滴水,嘀、嗒、嘀,声音很准,每七秒一滴。坐在后排的李工掏出手机调静音,震了两下就停了,他没看屏幕,手指悬在半空,像卡在某个Promise未resolve的状态里。桌上那摞打印的需求单没人收,最上面一张边角卷着,印着“鸿蒙分布式数据服务对接建议”,纸面有咖啡渍,不是我的,是前天谁搁那儿的杯子底留的。 评审完出门,电梯口遇见测试组小王,她正用指甲刮手机屏上的指纹膜,刮得吱吱响。我说你刮这个干啥,她说:“上周灰度那个‘离线消息回传’功能,用户没点,埋点0触发,日志连连接池超时都报不出来——因为根本没建连接。”她把刮下来的膜塞进袖口,动作太熟,像顺手扔了个烟头。我愣住,她补了句:“你们没给MySQL开slow_log吧?反正没人在意慢查询阈值设成500ms还是5s。” 投影仪对焦不准,右边菜单栏虚成一片光斑。老板当时指着那个模糊的“数据一致性兜底方案”说:“这个必须上。”没人说清兜底是靠本地SQLite缓存校验,还是靠MySQL binlog解析重放。后来上线,发现分布式事务场景下,一个跨设备的待办同步,在设备A删了任务、设备B同时编辑并提交——两个操作各自成功,但最终状态既不是删也不是改,是……空白。空字段,不是NULL,是三个空格。我们花两天才确认是INSERT IGNORE没处理好唯一索引冲突,而冲突原因,是某次升级把server_id配置重复写死了。记不清是哪个版本了,大概是鸿蒙3.1那次大包更新,他们打包脚本把my.cnf模板里所有#server_id=都替换成实际值,唯独漏了从库那台的/etc/my.cnf.d/replica.cnf——它还带着原始注释。谁动的手?不知道,没人追。 外卖汤洒了一点在桌上,浅褐色,慢慢往桌缝里渗。隔壁组小赵端着饭盒过来借充电线,他问:“你们那个‘消息防重表’为啥要建两个唯一索引?(device_id, msg_id) 和 (msg_id, device_id)——这不是一个东西?”我张嘴想答,又咽回去。其实不是,第一个是为快速查某设备某消息是否存在,第二个是为反向扫所有设备的某条消息状态。但上线后没人真扫过第二个,连SQL审计日志里都看不到LIKE “WHERE msg_id = ?”的走第二个索引。它就躺在那里,和我去年写的那份《鸿蒙侧数据库隔离级别选型建议》一样,压在PRD初稿底下,第17页,没人翻过。小赵说完就走了,耳机线缠着饭盒提手,转了三圈也没解开。 优胜劣汰?对。去年国庆之后,我们砍掉了三个“高优先级”数据库功能:一个带加密密钥轮转的本地密钥表、一个双写MySQL+轻量KV的读写分离中间件、还有一个号称能自动适配不同设备存储格式的Schema迁移器。留下的只有一个:把所有INSERT/UPDATE语句加上SET @harmony_device_id = ?,然后用trigger注入到audit_log字段里。就这么一条,活下来了。不是因为它多聪明,是因为它被QA天天跑,跑崩过两次,修复过三次,最后成了唯一被监控系统盯死的SQL模式。别的都像那把没水的白板笔,看起来该在,但一写就断。 我数过,我们项目组一共九个人,其中六个没在MySQL命令行里输过SHOW ENGINE INNODB STATUS\\G。有两个能认出Deadlock found when trying to get lock;剩下一个是我,但我忘过两次innodb_buffer_pool_size的单位是MB还是GB——上个月刚在从库OOM后想起来,是MB。可这事真重要吗?不如李工那天刮下来的那片指纹膜实在。他现在换新膜了,更薄,透光,摸起来滑得像没写过的DDL语句。
文章配图,仅供参考 会议室椅子少一把。上次来的人坐了,这次来的人站着。老张站那儿讲“事务隔离级别与鸿蒙应用生命周期对齐”,讲到一半,手机震,他掏出来看一眼就锁屏,动作快得像DROP TABLE IF EXISTS ——不犹豫,不解释,不回头。我看着他袖口露出的腕表,秒针走得很稳。可我们数据库的read_committed_snapshot是不是开的,连他自己都说不清。大概那个数吧。 我自己那份没人看的文档……算了,不说了。下次评审前,把binlog_format调成ROW,再让运维把max_allowed_packet翻倍。至少别让用户等三分钟才看到那条“消息发送成功”。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


视障友好:服务网格工程师的无障碍建站运维避坑指南
MySQL运维设计避坑指南:16年用户行为视角的5大经典陷阱
嵌入式工程师建站手记:裸机到高可用全链路运维
边缘运维视角:PHP安全编码三大致命坑
鸿蒙工程师跨界解构ASP:零起点构建企业级Web应用


浙公网安备 33038102330471号