不停机数据库迁移方案

首先我们需要知道一个基本的数据迁移的方案:

  1. 创建一个目标表
  2. 使用源表的数据去初始化目标表
  3. 执行一次校验, 此时使用源表数据去修复目标表数据
  4. 双写, 业务开启双写, 读写源表, 写目标表
  5. 开启增量校验和数据修复, 保持一段时间
  6. 切换双写顺序, 此时读写目标表, 数据以目标表为准
  7. 继续保持增量校验

1. 首先创建一个目标表:

CREATE TABLE target_table LIKE source_table;  -- 复制表结构
ALTER TABLE target_table ADD COLUMN new_column VARCHAR(255);  -- 可选扩展

2. 数据迁移

将原来的表的数据给迁移过去, 这一步我们可以借助 mysqldump 这种工具, 直接把数据迁移过去, 下面一部就是执行一次校验。

mysqldump -h source_host db source_table | mysql -h target_host db target_table

3. 数据校验

第一次校验的方式主要有两种,

  • 第一种就是全量校验, 全量校验主要指的是, 详细的对比两个表的字段时候想等, 如果不相等那么我们就要判断它的不一致的位置, 然后进行修复
  • 第二种方式就是增量校验, 增量校验主要指的是按照 uptime 这个字段, 来修复, 主要指的是如果时间晚于导出数据的那个时间点, 那么我们就更新对应的数据

开启双写:

这个东西, 主要利用一些工具, 比如 gorm 的 conn pool 这种工具, 利用这种装饰器模式封装两个数据源, 每次执行语句的时候, 根据标记位来执行对应的双写逻辑。

if flag == "双写以源表为准" {
	// 执行相关操作
}

if flag == "双写以目标表为准" {
	// 执行写操作
}

双写校验+ 增量校验: 也就是一边进行双写, 然后一边进行增量校验, 主要还是根据对应的 uptime 来做这个件事情

双写+目标表+ 原表, 之所以这样干的目的就是可以当出错的时候, 我们可以立刻去回滚对应的数据

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值