扫码阅读
手机扫码阅读

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

382 2024-03-14

数据库

神州数码云基地

在数据库上的尝试、调研与分享

本期内容 

 TiDB数据迁移的过程 

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


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

环境简介  

 生产硬件资源 

 生产集群信息 

 迁移数据库信息 

 新集群硬件资源 

 新集群信息 

迁移前提条件  

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

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

迁移方案  

 方案一 :TiDB Binlog

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

  • 1.Dumpling备份生产集群全量数据

  • 2.Lightning恢复全量数据到新集群

  • 4.生产停业务

  • 5.确认业务已停

  • 6.部署TiDB Binlog进行增量同步

  • 7.验证数据一致性

  • 8.切应用到新集群

 方案二 :TiDB CDC

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

  • 1.Dumpling备份生产集群全量数据

  • 2.Lightning恢复全量数据到新集群

  • 4.生产停业务

  • 5.确认业务已停

  • 6.部署TiDB CDC进行增量同步

  • 7.验证数据一致性

  • 8.切应用到新集群

 方案三:

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/backupchown -R tidb:tidb /data/backupcd /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.logtail -100f /data/backup/dumpling2.log

Step 2:用户和权限导出

vi /data/mysql_exp_grants.sh
#执行脚本chmod u+x /data/mysql_exp_grants.shsh /data/mysql_exp_grants.shcat /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 = 4000user = "root"password = "12345678"status-port = 10080pd-addr = "xxx.xxx.48.5:2379"log-level = "error" [checkpoint]enable = truedriver = "file"dsn = "/data/backup/tidb_lightning_checkpoint.pb"keep-after-success = false

Step 4:用户和权限导入

修改/data/backup/mysql_exp_grants_out_20220905.sqlcd /data/backup/cp mysql_exp_grants_out_2022xxxx.sql mysql_exp_grants_out_2022xxxx.sql.bakvi 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放置策略,此导入模式需要数据库为空,删除数据库前提前记录数据库属性,迁移后进行相应配置

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

TiDB集群之间迁移方法有很多

如果你有其他方法

欢迎你加入

与我们一起探讨~

本期作者 

 高文峰 

更多精彩内容 

了解云基地,就现在!

IT技术哪家

神州数码最在行

行业新星后起之秀

历史虽不长,但实 力 强

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247518649&idx=1&sn=fb10053ec539e63cce0142872d72156f&chksm=c02fb21ff7583b09881cfa9931267bae2beb4365adf8b92b7a70dd0faccd8d52a044fafc4ba2#rd