黑五大促最高立省 60%
  • 年付套餐首年立省 60%
  • 终身授权立省 45%
剩余
立即领取优惠

数据库搬走了,一个旧客户端没有——NovaCommerce 第三篇

26 分钟切换看似结束,旧管理面板却仍在旧库写入。真正的功课是控制写入者、核对冲突,并保护恢复后的新工作。

作者

Anichur Rahaman

1 个月前5 分钟阅读271 次浏览
数据库搬走了,一个旧客户端没有——NovaCommerce 第三篇

2026 年 10 月 5 日 22:59,数据库维护窗口结束,网站在 26 分钟后恢复。23:24,团队发现一个旧管理面板仍在写旧库。应用搬走了,所有写入者却没有一起搬走。

NovaCommerce 是课程与考试平台的匿名名称。第三篇保留既有 9–10 月项目记录,同时修正通用技术说明。历史计数不是本次新做的生产审计,也不是 StoreConsole 基准。

更小的双节点解决了另一种风险

原 managed MySQL 是单个 8 vCPU/32 GB 节点,没有备用。历史新配置为 MySQL 8.4 Standard,每节点 4 vCPU/16 GB,主节点加备用节点,数据约 11 GB。这针对单节点故障提供路径,并不证明零数据丢失、无延迟切换或区域级恢复。

双节点约 $389/月是历史预算,不是现行报价。DigitalOcean 当前文档列出 Standard Edition 限制:2026 年 10 月 15 日起适用于新纳入账户,11 月 30 日起适用于所有账户。复制方案前须核对账户、套餐和备用节点资格。备用也会复制误删除,因此不是备份。

一些检查通过了,但遗漏了一个写入者

记录描述了 22:33 维护路由、排空队列、停止调度、观察 30 秒无写入、约十分钟复制、验证及制作新应用镜像,再于 22:59 恢复。短暂无写入不是隔离措施,遗漏客户端可以稍后继续写。应列出 Web、工作进程、调度、回调、导入和外部面板,并在一致性复制前阻止全部旧写入。

案例报告表数、行数匹配,之后又检查表内容,并详细比较一个大结果表。必须保存比较对象、快照边界和方法。行数相同不代表内容相同,切换后比较还需要明确核对边界。也要检查权限、结构、使用的例程/事件、字符集及真实答案保存读取。标准 mysqldump 不是并行导出引擎;未记录的多流封装不能直接作为可复现的一致性操作方案。

历史观察记录值不能证明什么
复制总数341 表;18,727,244 行行数相同 ≠ 业务状态相同
最大结果表比较约 2.76 百万行应保留范围和方法
恢复后前四分钟约 2,900 请求;0 个 5xx不覆盖所有后续流程或写入者
旧库迟来写入48 =44 合并 +4 保留不是通用合并规则
仅 Web 连接估算10 ×80 =800未计双连接、工作节点和重叠

晚来的 48 行改变了回滚含义

旧面板在源库增加 48 行。历史修复合并其中 44 行,保留目标库四个更新版本,再迁移面板并更改旧凭据。44+4=48 是该事件的核对结果,不是通用“时间戳最新者获胜”规则。时钟、删除、关联行和并发编辑必须按业务语义处理,并保留审计记录。

停止遗漏写入者,同时终止或隔离已有连接。仅改密码不一定关闭已经认证的会话,要验证旧库写入被拒绝。旧集群据记载冻结保留 48 小时;新库开始接收写入后,它是恢复材料,不是最新回滚目标。未核对新答案就切回可能丢失已接受工作。保留期应依据恢复验证与义务,不是统一 48 小时。

数据库切换证据图:客户端清单、旧写入隔离、一致复制、业务验证、单写入者和迟来行核对。
遗漏旧面板揭示写入控制问题。记录的 26 分钟不是其他迁移的工期保证。

读取副本必须有新鲜度约定

案例把备用与主节点用于读,写入和工作节点读取只走主节点。供应商支持的备用读取端点可利用已付容量,却也共享恢复资源。需要验证支持范围、复制延迟和故障行为;专用读副本并非总是浪费。

Laravel sticky=true 只在同一请求发生写入后,把之后的读取送往写连接,不能单独保证下一个请求或整个会话读到新数据。跨请求新鲜度要有经过测试的机制,或对权威答案读取主库。多个读主机并不能保证统一两秒故障切换,也不代表任意查询可安全重放。应区分连接失败与查询已经执行的情况。

原 10 节点 ×80 个 PHP-FPM 子进程=800,只按每进程一个连接计算。读写各一个可能达到 1,600,尚未计工作进程、管理连接和滚动部署重叠,而历史上限为 1,601。预算必须覆盖所有连接来源和新旧节点。连接上限不是吞吐保证。

分离向量负载,不承诺完全隔离

AI 嵌入存于独立 PostgreSQL 17/pgvector 实例,历史规格为 2 vCPU/4 GB。1 vCPU/2 GB 的缩小试验因负载需要被撤回。独立实例提供各自 CPU/内存预算,但共享应用池、网络或供应商仍可能耦合故障。这是负载选择,不代表所有 MySQL 产品都没有向量能力。

10 月 7 日考试记录为 MySQL CPU 最大 24.5%、平均 13.4%,最多五个运行查询,未观察到锁等待。这仅支持该窗口这些信号未饱和,不能证明 450 requests/s 的上限或六倍容量;查询组合、写争用、I/O 和故障切换都会改变结果。

应用最小权限凭据与迁移权限分开,限制数据库访问,执行有业务检查及实测恢复目标的备份还原。配置了备用、成功复制、成功恢复是三份不同证据。第四篇将继续队列与工作节点的故事。

系列

一手资料

审核日期:2026年11月6日。Anichur Rahaman,StoreConsole 创建者。案例数字和价格均为历史记录;当前一手资料支持技术限定说明。

作者简介

Anichur Rahaman

继续阅读