内容: 记录最近在极客时间上学到的数据库数据迁移时的方法

问题背景:

当你的服务站点储存着海量数据,出现下列情况:

1、自建服务器站点需要迁移地点
2、自建服务器要迁移到云端服务器上

此时需要迁移服务站点上数据库中的数据

简单实现:

办法:

1、直接使用数据库的主从同步
2、使用类似mysqldump将数据源打包出来,然后恢复到新服务器上的mysql上

简单办法的遗漏之处:

1、迁移过程中如果不断有新数据写入,备份完旧的又有新的数据,何时才能完全过度?
2、可能出现同步过程中对极小部分新数据的遗漏
3、只能单库对单库的迁移,无法分库分表

迁移的基本要求:

1、应该在线迁移,不影响服务的提供
2、数据保证完整,迁移后新旧库保持一致
3、迁移过程中,不影响旧库的功能,即使迁移失败,也可以回滚到旧库,整个过程旧库保证正常提供服务

平滑实现一:双写

1、将新库配置为源库的从库,分库分表的同步数据
2、在数据写入的时候,同时写入新库和旧库;不过新库的写入可以是异步的,保证旧库写成功就可以
  (记得新库异步写入过程中,失败的写入需要记录到日志,后期进行补增)
3、进行随机校验,测试对新库和旧库的查询结果是否一致
  (此时随机抽取一定的比例的进行测试即可,无须全部,否则对海量数据的服务器开销太大)
4、开始流量过度,10% -> 20% -> 30% ...渐渐的过度流量到新库
5、如果过程中出现问题也无碍,只需继续将流量切回主库就好,因为实行双写,旧库一定是安全且完整的
6、连续测试几个周期,发现新库工作正常,即可以将流量全部过度到新库,迁移完成

平滑实现二:联机同步

1、将新库配置为旧库的从库(实现同步)
2、在新站点新增一个库作为新库的从库(实现备份)
3、等到三个库状态一致,开始流量切换
4、完全过度后,流量全部切换到新库,旧库可以暂停提供业务