生产数据库的迁移

{{ time }}

比如要将生产数据库从主机A迁到主机B, 有如下几种方式

一. 手工迁移
Step1 网站进入维护状态, 停止数据操作:记作时间点C
Step2 将数据库从主机A复制到主机B
Step3 将网站连接配置为主机B
Step4 网站退出维护状态, 开始运转; 主机A的数据库成为时间点C的快照

优点: 成本低, 无同步费用, 步骤简单
缺点: 网站停机维护时间较长, 是复制数据库的时间

二. 单向同步
Step1 【禁止】主机B生产库除同步以外的操作(就是说, 主机B的生产库要开始同步啦, 你不要再动啦, 一动就乱啦)
Step2 配置数据库从主机A->主机B的单向同步
Step3 同步初始化完成后, 进入"同步中"的状态, 就是"正常同步"的状态. 这时, 让网站进入维护状态, 等待主机A数据操作停止, 再等待同步任务显示延迟为0, 证明AB两端数据一致, 这时记作时间点C
Step4 删除单向同步任务
Step5 【解除禁止】主机B的数据操作
Step6 将网站连接配置为主机B
Step7 网站退出维护状态, 开始运转; 主机A的数据库成为时间点C的快照

优点: 网站停机维护时间较短, 为保存当前生产会话的时间
缺点: 步骤复杂, 有同步成本

三. 双向同步
Step1 【禁止】主机B生产库除同步以外的操作
Step2 配置数据库从主机A->主机B的正向同步
Step3 配置数据库从主机B->主机A的反向同步
Step4 同步双向进入"正常同步"状态时, 网站进入维护状态(对于很多PHP项目来说, 甚至不必进入维护状态)
Step5 【解除禁止】主机B的数据操作
Step6 将网站连接配置为主机B
Step7 网站退出维护状态, 开始运转;
Step8 停止正向同步
Step9 停止反向同步, 主机A的数据库成为此刻的快照

优点: 网站停机维护时间较短, 甚至有些项目不必进入维护状态; 可人为控制快照时间点
缺点: 步骤复杂, 双倍同步成本

四. 一键迁移
暂不讨论