tidb迁移知识:

tidb高度兼容MySQL5.7版本,所以mysql8.0版本特性都不支持.
1.字符编码问题:tidb不支持 utf8mb4_0900_ai_ci导致导入报错,需要提前修改上游数据库字符编码;
2.分区问题: 分区表支持 HASH、RANGE 和 LIST 分区类型。对于不支持的分区类型,TiDB 可能会报 Warning: Unsupported partition type %s, treat as normal table 错误,其中 %s 为不支持的具体分区类型.也需要提前处理表分区问题

字符编码问题批量修改字符集: (慎用)

SELECT
CONCAT(“ALTER TABLE ", TABLE_NAME," CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;”)
AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA=”history”
AND TABLE_TYPE=”BASE TABLE”

上面的查询语句 history可修改为任意库.
查询结果
image.png
复制查询结果可批量修改字符集

分区问题解决:

暂时跳过分区报错数据

tidblighting

TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,目前支持 Mydumper 或 CSV 输出格式的数据源。你可以在以下两种场景下使用 Lightning:
1.迅速导入大量新数据。
2. 备份恢复所有数据。
image.png
目前,TiDB Lightning 支持以下后端:

  • Importer-backend(默认)
  • Local-backend
  • TiDB-backend

以上几种后端导入数据的区别如下:

  1. Importer-backend:tidb-lightning 先将 SQL 或或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中。

    1. Local-backend:tidb-lightning 先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对以 SST 文件的形式上传到各个 TiKV 节点,然后由 TiKV 将这些 SST 文件 Ingest 到集群中。和 Importer-backend 原理相同,不过不依赖额外的 tikv-importer 组件。
  2. TiDB-backend:tidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入。

2. 下载Dumpling和TiDB Lightning工具

  1. wget https://download.pingcap.org/tidb-toolkit-v5.0.1-linux-amd64.tar.gz
  2. tar xvf tidb-toolkit-v5.0.1-linux-amd64.tar.gz
  3. cd tidb-toolkit-v5.0.1-linux-amd64/bin/


使用Dumpling将mysql中的数据导出

进入到上面下载工具解压后的bin下,进行导出:
首先创建文件存储的目录:
mkdir -p/tidb-data/mydumpersql/wellcloud/ && chmod -R 777 /tidb-data/mydumpersql/wellcloud/

./mydumper -h 192.168.40.210 -P 3306 -u root -p xxxx -t 16 -F 128 -B wellcloud -o /tidb-data/mydumpersql/wellcloud/
参数信息:
-h:mysql所在主机ip
-P:mysql的端口
-u:mysql的用户
-p:mysql密码
-t: 导出数据使用线程数
-F:指定单个文件的最大大小,单位为 MiB,可接受类似 5GiB 或 8KB 的输入。
-B:导出的数据库
-T:指定导出的表,不写-T,则导出该库下所有表
-r:指定单个文件的最大行数,指定该参数后 Dumpling 会开启表内并发加速导出,同时减少内存使用。
-o:导出数据存储的目录
参数详细可见:https://docs.pingcap.com/zh/tidb/dev/dumpling-overview#%E5%AF%BC%E5%87%BA%E4%B8%BA-sql-%E6%96%87%E4%BB%B6

进入/tidb-data/mydumpersql/wellcloud/
image.png
可以看到导出的文件即为成功

编写tidb-lightning.toml文件

[lightning]

转换数据的并发数,默认为逻辑 CPU 数量,不需要配置。
# 混合部署的情况下可以配置为逻辑 CPU 的 75% 大小。
# region-concurrency =

日志
level = “info”
file = “tidb-lightning.log”

[tikv-importer]
# backend 设置为 local 模式
backend = “tidb”
# 设置本地临时存储路径
# sorted-kv-dir = “/mnt/ssd/sorted-kv-dir”

[mydumper]
# Mydumper 源数据目录。
data-source-dir = “/tidb-data/mydumpersql/siphubcopy/“

[tidb]
# 目标集群的信息。tidb-server 的监听地址,填一个即可。
host = “192.168.40.39”
port = 4000
user = “root”
password =””
# 表架构信息在从 TiDB 的“状态端口”获取。
status-port = 10080
# pd-server 的地址,填一个即可
# pd-addr = “192.168.xxx.xxx:2379”

配置合适的参数运行 tidb-lightning。如果直接在命令行中用 nohup 启动程序,可能会因为 SIGHUP 信号而退出,建议把 nohup 放到脚本里面,如:
#!/bin/bash
nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &

检查数据

导入完毕后,TiDB Lightning 会自动退出。若导入成功,日志的最后一行会显示 tidb lightning exit。