数据库不停机迁移方案

2024-08-26 05:28
文章标签 数据库 方案 迁移 停机

本文主要是介绍数据库不停机迁移方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在业务发展过程中,可能会有需要进行数据迁移的场景。

一般来说可以分为两种

(1)停机迁移

(2)不停机迁移

停机迁移比较简单,步骤如下

(1)根据业务流量数据低峰时间,制定迁移计划。

(2)发布停业公告

(3)届时先停机,保证老库数据不会再变动,然后使用迁移工具进行数据的全量迁移

(4)迁移完成后进行新老数据库数据的对比校验

(5)数据校验没问题,流程切换到新库,完成

停机迁移的问题在于

(1)有的业务压根就不能容忍停机。还有就是数据全量迁移的耗时可能也比较久,长时间停机更是不可能接受。

(2)一把切,万一新库、新应用有什么问题,由于新库中新增的数据在老库中并没有,所有也没法切回老库,有问题也不能回滚。

但是停机迁移最大的好处是:简单!

所以实际业务中一些数据量没那么大,或者一些内部系统,非关键系统,采用这种方式其实是主流。再重复一遍,没有最好的方案,只有最适合的方案,有利就有弊,都是权衡取舍罢了。

不停机迁移步骤

(1)对业务代码进行改造,数据库修改操作改为双写,即同时写入新库和老库

insert:两边同时成功

delete:有的数据新库中没有,也没关系

update:有的数据新库中没有,也没关系

老库的写入不受影响,必须成功。新库的如果不成功也没关系,记录一下日志进行排查即可。

为了不影响系统的响应时间等,写入新库可以弄成异步操作

(2)将旧库所有数据迁移到新表

从老库中查询数据,更新到新库,伪代码

select 所有字段 from 旧表 where id in (select id from 旧表 order by id asc limit #{start},#{batchSize})

如果数据为空就结束

 否则对于里面的每条数据

开启事务

select 所有字段 from 旧表 where id = xxx for update;

插入新库(注意需要先delete再insert)

提交事务

这里要注意,一定要加for update锁定数据。

为什么?因为业务代码里面双写还在继续,比如业务代码中更新

update 表xx set monney = 100,然后旧表写入了,但迁移数据数据的读取代码在这之前执行的,所以读到的事旧数据。迁移代码正要把数据写入新库,双写代码已经把新库更新为最新数据,然后迁移代码又把旧数据覆盖上去了。这样就出现了丢失更新的问题。

如果加上for update,则能保证这一条数据在迁移过程中不发生改变,保证新老数据的一致性。

(3)校验两边数据的一致性。数据量太大的时候可以采用一般数据抽查、关键数据全量检查结合的方式

(4)将流量逐步切换到新表。灰度切换。

切换到新表,也就是主要写新的表,旧表也要写,这样如果新库有啥问题可以随时切换回旧库。

(5)平稳运行一段时间后,确保都没问题了,再全部转到新库上。

这篇关于数据库不停机迁移方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1107674

相关文章

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable