论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
分布式数据库
›
数据库之间表的迁移
数据库之间表的迁移
没腿的鸟
论坛元老
|
2024-9-23 00:51:55
|
显示全部楼层
|
阅读模式
楼主
主题
1020
|
帖子
1020
|
积分
3060
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
什么时间用?
相信大家在开发中,会先在本地和测试情况的数据库去建立表,没问题了再去正式情况建立雷同的表。大概我们有旧系统和新系统,要把旧系统里面的数据库某个功能的相关的表给导出来,这时间就会发生表的数据迁移。
目前我处于的公司正在维护一个新系统,是对原来旧系统的升级和维护,就需要进行测试,需要迁移表。
Nvaicate 完成快速迁移
之后可以点击开始后即可完成差别毗连下差别数据库里面表的快速迁移。
数据备份工具
这里我先来介绍一下 MySQL 上常用的两款数据备份工具:mysqldump和XtraBackup。
mysqldump:一个用于备份和恢复 MySQL 数据库的命令行工具。它允许用户导出 MySQL 数据库的结构、数据以及表之间的关系,以便在数据库发生问题时进行恢复。它是 一个逻辑备份工具,导出的内容是一条条 SQL。
XtraBackup:它使用了 InnoDB 存储引擎的数据备份技能,支持增量备份和恢复,并且支 持多主机备份和恢复。它是一个物理备份工具,相当于直接复制 InnoDB 的底层存储文 件。
通过步伐完成数据迁移
创建目标表。
用源表的数据初始化目标表。
实行一次校验,并且修复数据,此时用源表数据修复目标表数据。
业务代码开启双写,此时读源表,并且先写源表,数据以源表为准。
开启增量校验和数据修复,保持一段时间。
切换双写次序,此时读目标表,并且先写目标表,数据以目标表为准。
继承保持增量校验和数据修复。
切换为目标表单写,读写都只操作目标表。
假如是步伐,你的项目面临的场面需要保持数据同等性问题,那么有两个办法:
update_time字段校验
在初始化数据之后,你可以先实验立刻校验和修复一下数据,因为假如你前面用的是备份数 据,那么备份数据已经落后生产数据了。比如说你用的是昨天的备份,那么本日的修改目标 表就没有。还有假如你是导出的数据,那么导出数据到你导入数据这段时间,数据发生了变 化,目标表仍旧是没有的。
假如你们公司有明确的数据库规范的话,比如说所有的表都需要有 update_time 这个字段, 那么你在校验和修复的时间就可以采用增量的方案。因为只有 update_time 晚于你导出数据 的谁人时间点,才说明这一行的数据已经发生了变更。在修复的时间就
直接用源表的数据覆 盖掉目标表的数据
。
这个方案有两个条件:所有的表都是有更新时间戳的,并且删除是软删除的。
监听binlog
binlog 只用于触 发校验和修复这个动作,当我收到 binlog 之后,我会用 binlog 中的主键,去 查询源表和目标表,再比较两者的数据。假如差别等,就用源表的数据去修复 目标表。
拿到 binlog 之后,我用主键去目标表查询数据,然后把 binlog 里面的内容和 目标表的数据进行比较。假如数据差别等,再用 binlog 的主键去源表里面查询 到数据,直接覆盖目标表的数据。
主键问题
假如在源表中使用的是自增主键,那么在双写的时间写入目标表要写入主键。你需要在写入源表的时间拿到自增主键,然后写入目标表的时间设置好主 键。因为你其实并不能确保目标表自增的主键,和你源表自增的主键是同一个值。比如说在 并发场景下,两次插入。
在双写的时间比较难以处理的问题是自增主键问题。为了保持源表和目标表的 数据完全同等,需要在源表插入的时间拿到自增主键的值,然后用这个值作为 目标表插入的主键。
在处理批量插入的时间要更加小心一些。正常来说,批量插入假如用的是 VALUES 语法,那么生成的主键是一连的,就可以从返回的最后一个主键推测 出前面其他行的主键。即便 innodb_autoinc_lock_mode 取值是 2 也能包管 这一点。但是假如用的是多个 INSERT INTO VALUE 语句,大概 INSERT SELECT语句,这些语句生成的主键就可能不一连。在双写之前,就要先改造这 一类的业务。
innodb_autoinc_lock_mode
innodb_autoinc_lock_mode 是 InnoDB 引擎里面控制自增主键生成计谋的参数,它有三个 取值。
0:使用表自增锁,但是锁在 INSERT 语句结束之后就开释了。
1:使用表自增锁,假如是平凡的 INSERT INTO VALUE 大概 INSERT INTO VALUES 语 句,申请了主键就开释锁,而不是整个 INSERT 语句实行完毕才开释。假如是 INSERT SELECT 等语句,因为无法确定究竟要插入多少行,以是都是整个 INSERT 语句实行完毕才开释。
2:使用表自增锁,所有的语句都是申请了主键就立刻开释。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
没腿的鸟
论坛元老
这个人很懒什么都没写!
楼主热帖
CVE-2022-23131 Zabbix SAML SSO认证绕 ...
iOS全埋点解决方案-采集崩溃 ...
【ollama】Linux下更改ollama模型下载 ...
同一个网络下两台设备看直播时,进度不 ...
iOS 苹果集成登录及苹果图标的制作要求 ...
java代码审计-XSS
北斗授时产品(GPS北斗授时设备)加NTP ...
【密码管理器】上海道宁为您提供存储和 ...
Doris(七) -- 修改表、动态和临时分区 ...
K8S 性能优化-K8S Node 参数调优 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Java
.Net
SQL-Server
快速回复
返回顶部
返回列表