跳到正文

数据库脚本在多个站点执行前应该检查什么

同一份数据库脚本要在多个站点执行,首先要确认的不是“能否批量运行”,而是每个目标库是否满足相同前提。站点身份、当前版本、脚本校验值、备份可恢复性、事务边界、重复执行结果和验收查询都明确后,才适合从小批站点开始。

先证明目标库是对的

执行前应输出并人工复核:站点、数据库实例、库名、数据库版本、应用版本和当前迁移版本。连接账号只授予本次变更所需权限,生产密码不能写进 SQL、任务参数或日志。

脚本应有唯一版本和校验值。使用迁移工具时,可以利用类似 Flyway Validate 的机制检查已执行记录与本地迁移名称、类型和校验值是否一致;不使用 Flyway,也要建立等价的版本记录。

执行前清单要能阻断任务

  • 脚本是否已经在同数据库类型和版本的测试副本验证;
  • 目标站点当前结构与基线是否一致;
  • 备份或快照是否完成,并实际验证过恢复路径;
  • 大表变更会锁多久,维护窗口是否足够;
  • 成功、无须执行和失败分别用什么查询判断;
  • 哪些错误必须立即停止后续站点。

检查失败时应停止该站点,而不是为了“全量完成”继续执行。

事务、幂等和恢复是三件事

不要假设一个外层事务能撤销所有语句。MySQL 8.4 官方文档列出的多类 DDL 会在执行前后产生隐式提交,部分操作也不能用普通回滚恢复。其他数据库同样要按具体版本核对。

“可重复执行”也不能只靠 IF EXISTS 判断。重复执行后,数据、约束和版本记录必须仍然正确。对不可逆变更,应准备经过演练的修复脚本或备份恢复流程,并明确由谁决定启用。

多站点先小批,再闭环

先选一个环境和数据规模有代表性的站点,执行后核对结构、关键数据、应用健康状态和迁移记录,再逐批扩大。每个站点都应留下脚本版本、开始和结束时间、执行结果、验收结果与人工处置记录,未完成项进入明确清单。

数据库变更可以按火星叔叔发布助手的自定义模板组织,但正式使用前必须在目标数据库类型、版本和数据规模上验证事务与恢复边界,不能把模板执行等同于自动回滚。可先了解私有化软件交付方案受控执行安全边界;若要设计首个数据库模板,可通过联系页面一起核对测试与恢复条件。

参考资料

重复的现场操作,一次定义,多站点执行