服务迁移导致数据差异

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

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

  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。

# 备份关联id
UPDATE `posts` SET temp_pid = pid

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

# 动态更新新关联id
UPDATE posts parent,posts child
SET child.parent_pid = parent.pid
WHERE child.parent_pid = parent.temp_pid
AND child.parent_pid <> 0

感谢@toobug提供的方案。

END

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

datapump简介(一) (r6笔记第2天)

datapump是在10g之后推出的新特性,无论从功能还是性能上,都有一定的改进,可以说在功能上丰富了很多,在性能上也提升了很多。可以说exp/imp中能实现的...

27350
来自专栏PHP实战技术

高可用架构-- MySQL主从复制的配置

环境 操作系统:CentOS-6.6-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6.26.tar.gz 主节点IP:192.168...

38970
来自专栏深度学习之tensorflow实战篇

Centos7.4 版本环境下安装Mysql5.7操作记录

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MyS...

37590
来自专栏自由而无用的灵魂的碎碎念

将MySQL数据迁移到Oracle

因为项目的原因,今晚将mysql数据库的内容尝试迁移到oracle,虽然结果失败,不过学到了不少,下次就不一定了,哈哈

32010
来自专栏北京马哥教育

利用硬链接和truncate降低drop table对线上环境的影响

众所周知drop table会严重的消耗服务器IO性能,如果被drop的table容量较大,甚至会影响到线上的正常。 首先,我们看一下为什么drop容量大的ta...

29780
来自专栏IT笔记

Lepus搭建企业级数据库慢查询分析平台

Lepus的慢查询分析平台是独立于监控系统的模块,该功能需要使用percona-toolkit工具来采集和记录慢查询日志,并且需要部署一个我们提供的shell脚...

17620
来自专栏程序员同行者

优化mysql服务器

13820
来自专栏北京马哥教育

MySQL/MariaDB数据库备份与恢复

前言 数据库一般存放着企业最为重要的数据,它关系到企业业务能否正常运转,数据库服务器总会遇到一 些不可抗拒因素,导致数据丢失或损坏,而数据库备份可以帮助我们...

61860
来自专栏LanceToBigData

MySQL集群(一)之主从复制

前面学完了JDBC,接下来带大家感受一下MySQL集群!其实什么是MySQL集群?简单的说就是一群机器(服务器)的集合,它们连在一起来工作。 其实各种数据库都有...

31250
来自专栏pangguoming

mysql主从配置(清晰的思路)

例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表

19620

扫码关注云+社区

领取腾讯云代金券