首页/云/云平台与虚拟化速查/数据冻结与停写窗口

数据冻结与停写窗口

割接需要一段数据冻结期:应用停止写入、定时任务暂停、外部接口切换为只读或排队;冻结范围要覆盖所有写入路径,包括批处理与后台管理入口。

云平台与虚拟化速查云更新于 2026-10-13

数据冻结与停写窗口是什么

割接需要一段写冻结期:应用停止写入、定时任务暂停、对外接口改为只读或排队。冻结的难点几乎都不在主站,而在那些容易被忽略的写入路径——批处理、后台补录、报表回写、消息队列消费者、第三方回调与运维手工执行的 SQL。判断冻结是否完成只有一个标准:源端写入速率归零并且保持住,而不是我们已经通知业务方了。

基本信息

冻结对象应用写入口、批处理与调度任务、MQ 消费者、后台补录、外部回调
技术手段维护页与写开关、网关层拦截、数据库只读账号、暂停消费
确认方法采样源端写入计数,连续多个间隔不增长
边界约定冻结期内允许执行的例外操作白名单
典型时长按追平耗时决定,从十几分钟到数小时,需与业务方预约低峰时段
超时处理达到约定时限仍未追平则放弃本次割接,恢复写入并复盘

典型使用场景

  • 数据库迁移割接:全量完成后停写,等增量追平再切换
  • 存储后端切换:冻结写入后做最后一次块级同步再切挂载点
  • 版本升级:升级前冻结写操作,保证备份与升级基线一致
  • 机房搬迁:先把写入切到只读,再搬运数据与设备
  • 对账窗口:财务或结算类业务在固定时点冻结,避免统计口径漂移

停写确认(MySQL 侧)

停写确认(MySQL 侧)
SHOW PROCESSLIST;                          # 观察是否仍有处于执行中的写入会话
SHOW GLOBAL STATUS LIKE 'Com_insert';      # 记录基数,间隔 30 秒再采一次比较
SHOW GLOBAL STATUS LIKE 'Com_update';
SHOW GLOBAL STATUS LIKE 'Com_delete';
SHOW GLOBAL STATUS LIKE 'Innodb_rows_inserted';
# 连续多次采样都不增长,才认为写入已真正停止;只采一次看不出趋势

写入路径与冻结手段

写入路径常见遗漏冻结手段
应用接口只停主站,开放平台与内部接口仍在写网关层统一拦截,或打开全站维护开关
批处理与调度忘记暂停定时任务与对账作业关闭调度器并确认下次触发时间晚于冻结期
消息队列消费者仍在消费并写库暂停消费,或让消息在队列中堆积待恢复后再处理
后台管理运营补录、客服改单在冻结期继续提交收回写权限或通过维护页限制入口
数据库直连DBA 手工 SQL 与运维脚本绕过应用层冻结期暂停执行写语句,例外操作列入白名单并记录
冻结窗口要提前与业务方预约并说明最长时长:客服、运营与财务的临时需求必须走白名单,否则冻结期会被零星写入打断,追平永远不归零。
冻结期内不要做与割接无关的变更(发版、扩缩容、索引调整):出问题时无法区分是割接操作还是额外变更导致的。

易错点

  • 只停主站不停批任务与消费者:源库仍有写入,增量永远追不平
  • 停写未通知业务方:客服在冻结期发起补单,切开后数据丢失或需要人工回补
  • 只采一次写入计数就宣布停写:恰好落在两次批量写入之间,误判为零写入
  • 冻结期做过长的维护承诺:追平耗时超出预期却已无法优雅回退
  • 不记录例外操作:白名单里的手工写入没有留痕,事后对账无法解释差异

数据来源与参考

  • 阿里云 割接停写指导文档
  • MySQL 8.0 Reference Manual:服务器状态变量
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌