数据库丨记录一次TiDB v5.2.3迁移到v6.1.0的实操过程

news2024/12/27 13:13:06

文章目录

  • 前言
  • 一、环境简介
  • 二、迁移前提条件
  • 三、迁移方案
  • 四、迁移过程
  • 总结


前言

TiDB 是一款结合了传统的关系型数据库和 NoSQL 数据库特性的新型分布式数据库。是第一个把数据分布在全球范围内的系统,并且支持外部一致性的分布式事务。

TiDB 具备强一致性和高可用性,支持分布式事务的处理,所以实用性和应用性都很高。本期跟大家分享TiDB数据迁移的实操过程。


一、环境简介

  • 生产硬件资源

在这里插入图片描述

  • 生产集群信息

在这里插入图片描述

  • 迁移数据库信息

在这里插入图片描述

  • 新集群硬件资源

在这里插入图片描述

  • 新集群信息

在这里插入图片描述


二、迁移前提条件

1)由于客户环境两个TiDB集群网络不相通,只能通过开放网络策略进行生产和新集群之间的连通。

  1. 提前进行两个集群配置文件和系统变量参数进行收集,因为两集群版本不一样,有很多迁移后新增或删除的参数进行一个对比修改。

三、迁移方案

  • 方案一 :TiDB Binlog

备份恢复过程中不停机(Dumpling+Lightning+TiDB Binlog增量同步)

  1. Dumpling备份生产集群全量数据
  2. Lightning恢复全量数据到新集群
  3. 生产停业务
  4. 确认业务已停
  5. 部署TiDB Binlog进行增量同步
  6. 验证数据一致性
  7. 切应用到新集群
  • 方案二 :TiDB CDC

备份恢复过程中不停机(Dumpling+Lightning+TiDB CDC增量同步)

  1. Dumpling备份生产集群全量数据
  2. Lightning恢复全量数据到新集群
  3. 生产停业务
  4. 确认业务已停
  5. 部署TiDB CDC进行增量同步
  6. 验证数据一致性
  7. 切应用到新集群
  • 方案三:Dumpling+Lightning(建议)
  1. 生产停业务
  2. 确认业务已停
  3. dumpling备份生产集群全量数据
  4. lightning恢复全量数据到新集群
  5. 验证数据一致性
  6. 切应用到新集群
  • 方案四:DM全量数据迁移和增量数据同步
  1. 部署DM集群
  2. 进行全量数据迁移和增量数据同步
  3. 生产停业务
  4. 确认业务已停
  5. 验证数据一致性
  6. 切应用到新集群

因为客户迁移数据量比较少和资源不满足组件搭建,建议使用方案三,而不采用方案一、二、四方式进行TiDB集群数据迁移。

注意:方案三没有部署增量实时同步组件,迁移过程中要保证TiDB集群业务暂停使用来保证数据的一致性。


四、迁移过程

  • 确认业务已停

业务已停后,TiDB开启全局只读模式并重启集群。

  • Step 1:TiDB设置只读
show variables like '%read_only%';
set global tidb_restricted_read_only=on;
  • Step 2:重启集群
show processlist;
tiup cluster restart tidb1 -R tidb
  • 逻辑导出导入

  • Step 1:Dumpling导出

mkdir -p /data/backup
chown -R tidb:tidb /data/backup
cd /home/tidb/tidb-community-server-v5.2.3-linux-amd64
./dumpling -uroot -P4000 -hxxx.xxx.15.4 -p123456 --filetype sql -t 8 -r 200000 -F256MiB -o /data/backup --filter "db01.*" >> /data/backup/dumpling1.log
./dumpling -uroot -P4000 -hxxx.xxx.15.4 -p123456 --filetype sql -t 8 -r 200000 -F256MiB -o /data/backup --filter "db02.*" >> /data/backup/dumpling2.log
#查看日志是否有报错
tail -100f /data/backup/dumpling1.log
tail -100f /data/backup/dumpling2.log
  • Step 2:用户和权限导出
vi /data/mysql_exp_grants.sh

#执行脚本
chmod u+x /data/mysql_exp_grants.sh
sh /data/mysql_exp_grants.sh
cat /data/backup/mysql_exp_grants_out_2022xxxx.sql
  • Step 3:Lightning
#先确认新集群对应数据库没有数据
show create database db01;
show create database db02;
drop database db01;
drop database db02;
CREATE DATABASE db01 PLACEMENT POLICY czpool;
CREATE DATABASE db02 PLACEMENT POLICY zjpool;
vi /data/tidb-lightning.toml

[lightning]
level = "info"
file = "/data/backup/tidb-lightning.log"
check-requirements = true

[mydumper]
data-source-dir = "/data/backup"
character-set = "auto"

[tikv-importer]
backend = "local"
sorted-kv-dir = "/sort"

[tidb]
host = "xxx.xxx.48.8"
port = 4000
user = "root"
password = "12345678"
status-port = 10080
pd-addr = "xxx.xxx.48.5:2379"
log-level = "error"
 
[checkpoint]
enable = true
driver = "file"
dsn = "/data/backup/tidb_lightning_checkpoint.pb"
keep-after-success = false
  • Step 4:用户和权限导入
修改/data/backup/mysql_exp_grants_out_20220905.sql
cd /data/backup/
cp mysql_exp_grants_out_2022xxxx.sql mysql_exp_grants_out_2022xxxx.sql.bak
vi mysql_exp_grants_out_2022xxxx.sql
删除root用户的
source /data/backup/mysql_exp_grants_out_20221108.sql
  • Step 5:验证数据一致性
vi /home/tidb/sync-diff-inspector.toml

 export-fix-sql = true

[data-sources.tidb1]
    host = "xxx.xxx.1.55"
    port = 4000
    user = "root"
    password = "12345678"
 
[data-sources.tidb0]
    host = "xxx.xxx.12.184"
    port = 4000
    user = "root"
    password = "123456"

[task]
    output-dir = "/data/output"
    source-instances = ["tidb1"]
    target-instance = "tidb0"
    target-check-tables = ["db01.*", "db02.*"]
#执行对比
cd /home/tidb/soft/tidb-enterprise-toolkit-v6.1.0-linux-amd64/
./sync_diff_inspector --config /home/tidb/sync-diff-inspector.toml
  • Step 6:新集群进行参数修改

因为旧集群修改过系统变量和参数,可能会对应用造成一定的影响。

迁移后,需要根据之前的参数进行判断修改。

  • Step 7:应用切到新集群

  • Step 8:取消TiDB只读

set global tidb_restricted_read_only=off;
set global tidb_super_read_only=off;
tiup cluster restart tidb2
show variables like '%read_only%';

总结

  1. TiDB集群之间迁移方法有很多种,根据客户实际情况进行一个方案选择。
  2. 迁移前需要比对两集群参数文件和系统变量,迁移后进行参数判断修改。
  3. 用户权限的导出和导入,防止旧集群用户登录不了新集群
  4. 迁移前,最好数据库进行设置只读模式,防止数据还有新增等意外情况。
  5. 因为新集群placement rule in放置策略,此导入模式需要数据库为空,删除数据库前提前记录数据库属性,迁移后进行相应配置

以上就是今天分享的内容,感兴趣的可以收藏喔~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Struts2之注解

Struts2之注解1、引入依赖2、注解结构3、注解的使用1、引入依赖 Struts2中可以使用注解来代表struts.xml中的某些配置&#xff0c;可以简化配置。要使用注解&#xff0c;必须引入额外的依赖&#xff0c;如下&#xff1a; <!-- struts2注解依赖 --><dependency><…

未经风雨,怎见彩虹!回首2022,你好2023,新的一年,点面科技与您一起大展宏“兔”,扬眉“兔”气!

时光飞逝&#xff0c;转眼间2022虎年即将变成昨天的记忆。2022年&#xff0c;对于整个行业而言都是不寻常的一年&#xff0c;我们砥砺艰辛&#xff0c;着实经历着一场“寒冬”。但是&#xff0c;2022年注定也是不平凡的一年&#xff0c;在这个变中有定、变中求新的市场格局下&a…

【Rust】11. 泛型、Trait 和生命周期

11.1 泛型数据类型 11.1.1 函数的泛型 注意&#xff1a;泛型的比较适用于实现了 std::cmp::PartialOrd trait 的数据类型 11.1.2 结构体的泛型 结构体的泛型可以使用多个泛型类型参数 11.1.3 枚举的泛型 类似于结构体&#xff0c;枚举的泛型也可以使用多个泛型类型参数 11.…

Android 动画

在App中合理地使用动画能够获得友好愉悦的用户体验&#xff0c;Android中的动画有View动画、属性动画、帧动画、布局动画、转场动画等&#xff0c;在5.x以后有又新增了矢量动画&#xff0c;这些动画在平常开发中使用较为普遍&#xff0c;所以有必要做一次完整的总结。一、View动…

130道python练习题 完整版PDF

今天跟大家分享一些干货&#xff0c;在学python的朋友可以动起来了&#xff01; python基础知识练习题&#xff0c;常见常用的&#xff0c;可以作为参考&#xff0c;挺不错的&#xff0c;也有许许多多的讲解&#xff0c;适合python巩固基础知识和入门 130道练习题&#xff0c…

电脑网速慢怎么解决?提升网速真的很容易!

我们经常会使用电脑&#xff0c;如果加载网页的时间过长&#xff0c;或者是出现未响应的提示等问题&#xff0c;会非常影响我们使用电脑的观感。 针对这种问题&#xff0c;电脑网速慢怎么解决&#xff1f;来看看下面造成电脑网速慢的主要原因&#xff0c;以及我们该怎么提升电…

Python父类方法重写

在 Python 中&#xff0c;子类继承了父类&#xff0c;那么子类就拥有了父类所有的类属性和类方法。通常情况下&#xff0c;子类会在此基础上&#xff0c;扩展一些新的类属性和类方法。但凡事都有例外&#xff0c;我们可能会遇到这样一种情况&#xff0c;即子类从父类继承得来的…

vue前框框架课程笔记(六)

目录单文件组件.vue文件单文件组件常用结构App.vueStudent.vueSchool.vuemain.jsindex.html运行结果vue脚手架具体步骤项目架构其他配置项props配置项mixin混入插件scoped属性本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目…

zookeeper源码分享四 ---- RequestProcessor 处理链路

单机zookeeper RequestProcessor 处理链路 将请求放入LinkedBlockingQueue队列中&#xff0c;通过一个队列中。启动一个线程去消费这个队列&#xff0c;避免了阻塞。 zookeeper的处理是实现RequestProcessor接口的processRequest(Request request) 方法。 PrepRequestProcesso…

exsi删除虚拟机提示在当前状况下不允许执行此操作解决方法、vmware删除虚拟机提示在当前状况下不允许执行此操作解决方法

说明 我这exsi版本为5.5 今天在回收虚拟机的时候有些虚拟机无法删除&#xff0c;提示下面内容。 解决方法 方法1 直接给删除失败的虚拟机开机&#xff0c;开机完毕以后再关机就能直接删除了。 方法2 删除失败的虚拟机&#xff0c;也无法开机的情况下&#xff0c;实用该方…

春节档的观影“热”,拯救不了影视圈的“冷”?

配图来自Canva可画 疫情三年&#xff0c;影视业也随着“冬眠”了三年。 先是疫情爆发影响影视业上下游的正常生产&#xff0c;而后国家加速规范影视行业税收秩序&#xff0c;资本相继撤离&#xff0c;再后来影视企业入不敷出业绩巨亏&#xff0c;影视寒冬来临成为行业共识。在…

MMCV - dataset_analysis.py 可视化检测和跟踪任务自定义数据集神器

做视觉检测跟踪任务时,我们需要在论文插图中体现出我们数据集的信息,这个时候就有一个非常好用的神器:dataset_analysis.py的文件。该文件能够帮助用户直接可视化custom数据集的bbox实例信息,如上图所示,包括:显示类别和 bbox 实例个数的分布图;显示类别和 bbox 实例宽/…

中科院和人社部职称评审所需材料内容对比

目录1.前言2.中科院所需材料2.1 基本情况2.2 工作经历2.3 主要专业技术工作业绩2.4 重要著&#xff08;译&#xff09;作、论文及技术工作报告2.5 继 续 教 育 情 况2.6 考试、考核情况2.7 单位推荐意见2.8 材料审核意见2.9 个人技术报告2.10 未来工作展望3.人社部所需材料3.1 …

三十八、Kubernetes1.25中数据存储第二篇

1、概述在前面已经提到&#xff0c;容器的生命周期可能很短&#xff0c;会被频繁地创建和销毁。那么容器在销毁时&#xff0c;保存在容器中的数据也会被清除。这种结果对用户来说&#xff0c;在某些情况下是不乐意看到的。为了持久化保存容器的数据&#xff0c;kubernetes引入了…

行为型模式 - 状态模式State

状态模式的定义与特点 状态&#xff08;State&#xff09;模式的定义&#xff1a;对有状态的对象&#xff0c;把复杂的“判断逻辑”提取到不同的状态对象中&#xff0c;允许状态对象在其内部状态发生改变时改变其行为。 状态模式是一种对象行为型模式&#xff0c;其主要优点…

Oracle用户权限管理

一、运行企业管理器 管理员身份运行客户端的企业管理器 首次打开需要添加数据库信息&#xff0c;这里使用已经存在的数据库orcl 使用系统用户登录 用户名&#xff1a;system&#xff0c;口令orcl 或者不输入使用SYSDBA登录 可以查看所有用户的详细信息: 用户名, 账户状态,…

union和union all 的区别

1&#xff1a;union用于合并两个或多个select 语句的结果集。 注意&#xff1a; 1&#xff1a;union内部的select 语句必需拥有相同数量的列&#xff0c;列也夜必须拥有相似的数据类型&#xff0c;同时每条select 语句中的列的顺序必须相同。 2&#xff1a;union结果集中的列…

JVM垃圾回收与性能调优策略

一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范&#xff0c;JVM将内存划分为&#xff1a; New&#xff08;年轻代&#xff09; Tenured&#xff08;年老代&#xff09; 永久代&#xff08;Perm&#xff09; 其中New和Tenured属于堆内存&#xff0c;堆内存会从JVM启动参…

项目代码版本控制与保护

一、版本命名规则 1.1 需求开发分支命名规则 格式&#xff1a;dev_v版本号_需求名称 案例&#xff1a;dev_v01.31_TX202301141 dev_v01.31_数字产品平台订单查询优化 1.2 测试环境发布分支命名规则 格式&#xff1a;uat_deploy 1.3 预上环境分支命名规则 格式&#xff1a…