写点什么

记录一次 TiDB v5.2.3 迁移到 v6.1.0 的过程

  • 2022-11-25
    北京
  • 本文字数:3233 字

    阅读完需:约 11 分钟

作者: gary 原文来源:https://tidb.net/blog/e23a7355

一.环境简介

1.1 生产硬件资源


1.2 生产集群信息


1.3 迁移数据库信息


1.4 新集群硬件资源

| | | | | | | || ———————————— | — | — | —- | – | ————- | ————- || 组件 | CPU | 内存 | 磁盘 | 网络 | 私网 IP | 公网 IP || monitor/alertmanager/prometheus/tiup | 8C | 16G | 100G | 万兆 | xxx.xxx.48.4 | 10.141.12.180 || pd1 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.5 | 10.141.12.181 || pd2 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.6 | 10.141.12.182 || pd3 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.7 | 10.141.12.183 || tidb1 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.8 | 10.141.12.184 || tidb2 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.9 | 10.141.12.185 || tidb3 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.10 | 10.141.12.186 || tidb4 | 8C | 16G | 100G | 万兆 | xxx.xxx.48.11 | 10.141.12.187 || tikv1 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.12 | 10.141.12.188 || tikv2 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.13 | 10.141.12.189 || tikv3 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.14 | 10.141.12.190 || tikv4 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.15 | 10.141.12.191 || tikv5 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.16 | 10.141.12.192 || tikv6 | 16C | 32G | 200G | 万兆 | xxx.xxx.48.17 | 10.141.12.193 || tiem | 8C | 16G | 300G | 万兆 | xxx.xxx.48.18 | 10.141.12.194 |


1.5 新集群信息


二.迁移前提条件

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


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

三.迁移方案

方案一:tidb-binlog


备份恢复过程中不停机 (dumpling+lightning+tidb binlog 增量同步)


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


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


4. 生产停业务


5. 确认业务已停


6. 部署 tidb binlog 进行增量同步


7. 验证数据一致性


8. 切应用到新集群


方案二:tidbcdc


备份恢复过程中不停机 (dumpling+lightning+tidbcdc 增量同步)


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


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


4. 生产停业务


5. 确认业务已停


6. 部署 tidbcdc 进行增量同步


7. 验证数据一致性


8. 切应用到新集群


方案三:dumpling+lightning(建议)


1. 生产停业务


2. 确认业务已停


3.dumpling 备份生产集群全量数据


4.lightning 恢复全量数据到新集群


5. 验证数据一致性


6. 切应用到新集群


方案四:DM 全量数据迁移和增量数据同步 


1. 部署 DM 集群


2. 进行全量数据迁移和增量数据同步


3. 生产停业务


4. 确认业务已停


5. 验证数据一致性


6. 切应用到新集群


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


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

四.迁移过程

4.1 确认业务已停

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


4.1.1 tidb 设置只读

show variables like ‘%read_only%‘;


set global tidb_restricted_read_only=on;


4.1.2 重启集群

show processlist;


tiup cluster restart tidb1 -R tidb


4.2 逻辑导出导入

4.2.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

4.2.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


4.2.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


4.2.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


4.2.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

4.2.6 新集群进行参数修改

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


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

4.2.7 应用切到新集群

4.2.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 放置策略,此导入模式需要数据库为空,删除数据库前提前记录数据库属性,迁移后进行相应配置


发布于: 刚刚阅读数: 4
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
记录一次TiDB v5.2.3迁移到v6.1.0的过程_迁移_TiDB 社区干货传送门_InfoQ写作社区