服务迁移导致数据差异

折腾博客的时候,经常搬服务器,按理来说,迁移是一件很简单的事。

通常,数据迁移包括以下几步:

  1. 网站根目录打包迁移,例如public_html这样的目录。
  2. 数据库迁移,通过phpmyadmin或者navicat之类的,把mysql数据复制到新的服务器上面。
  3. 通过修改本机hosts检查新服务器是否部署成功。
  4. 更改DNS,实施迁移。

通常我在dnspod里面,设置的解析缓存时间很短,基本上我修改DNS,是马上生效的。但毕竟用户的DNS不在我们的控制范围,总会有用户解析到旧的服务器上面,杯具就这样发生了。

案例回放

一个内部系统,进行服务迁移,从A服务器到B服务器。但是迁移过程中,域名解析没有同步生效,有的用户访问到了A,有的用户访问到了B。

一些用户,在系统上面新建了一部分数据,这部分新的数据,一部分存放在A里面,一部分存放在B里面。很自然,我必须得让B里面的数据是最新的,于是我需要去复制A里面的新数据到B里面去。因为A\B都有新数据,结果部分数据的ID冲突了。

ID冲突不要紧,insert的时候不要给ID,让B系统重新生成ID就好。但是这样又引入一个新的问题,数据表里面的ID有关联,新ID丢失了原来的关联。

解决方案

为了解决这个问题,复制A的新数据到B的时候,先给两边临时保存一下他们各自的ID,例如用temp_pid。

然后我们就可以根据这个temp_pid恢复新增数据的各种关联。

感谢@toobug提供的方案。

END

你们在服务迁移的时候,又是怎么做的呢?直接关闭旧系统?