作者: gykj-sunzl 原文来源: https://tidb.net/blog/75936cd7
1.TiDB集群
1.1拓扑结构
3副本集群
Ip | 组件 |
73.134.46.237 | 中控机、PD、TiDB Server |
73.134.46.61 非SSD固态硬盘 | TiKV1 |
73.134.47.200 非SSD固态硬盘 | TiKV2 |
73.134.46.239 非SSD固态硬盘 | TiKV3 |
73.134.47.53 | Prometheus、Grafana、alertmanager、Nginx、HAProxy |
1.2相关链接
Dashboard:
http://73.134.46.237:2379/dashboard
Grafana:
http://73.134.47.53:3000
TiDB集群数据源:
HAProxy 73.134.47.53:3390 推荐
Nginx 73.134.47.53:4000
2. 接入指引
2.1方案比对
小数据量迁移
通常数据量较低时,使用 DM 进行迁移较为简单,可直接完成全量+持续增量迁移工作。
** 大数据量迁移**
当数据量较大时,DM 较低的数据导入速度 (30~50 GiB/h) 可能令整个迁移周期过长。本文所称“大数据量”通常指 TiB 级别以上。使用 Dumpling 和 TiDB Lightning 进行全量数据迁移,其本地导入 (local backend) 模式导入速度可达每小时 500 GiB。完成全量数据迁移后,再使用 DM 完成增量数据迁移。
名称 | 使用场景 | 上游(或输入源文件) | 下游 **(或输出文件)** | 主要优势 | 使用限制 |
Data Migration集群 | 用于将数据从与MySQL 协议兼容的数据库迁移到 TiDB。 | MySQL,MariaDB,Aurora,MySQL | TiDB | 一体化的数据迁移任务管理工具,支持全量迁移和增量同步;支持对表与操作进行过滤;支持分库分表的合并迁移。 | 建议用于 1 TB 以内的存量数据迁移。 |
Dumpling | 用于将数据从 MySQL/TiDB进行全量导出。 | MySQL,TiDB | SQL,CSV | 支持全新的 table-filter,筛选数据更加方便;支持导出到 Amazon S3 云盘 | 如果导出后计划往非 TiDB 的数据库恢复,建议使用 Dumpling;如果是往另一个 TiDB 恢复,建议使用 BR。 |
TiDB Lightning | 用于将数据全量导入到 TiDB。 | Dumpling 输出的文件;从 Hive 或者 Aurora 导出的 Parquet 文件;从本地盘或 Amazon S3云盘读取数据。 | TiDB | 支持迅速导入大量新数据,实现快速初始化 TiDB 集群的指定表;支持断点续传;支持数据过滤。 | Physical Import Mode Logical Import Mode |
2.2方案一Data Migration集群(推荐)
2.3方案二Dumpling和TiDB Lightning
3.Data Migration集群
3.1DM集群拓扑结构
Ip | 组件 |
73.134.47.190 | Dm-master、Dm-worker、Prometheus、Grafana、alertmanager |
3.2相关链接:
Dashboard:
http://73.134.47.190:8261/dashboard
Grafana:
http://73.134.47.190:3000/
3.3离线部署DM集群
a. 制作离线镜像
在外网连通的服务器上使用TiUP工具制作离线镜像
tiup mirror clone tidb-dm-v6.5.0-linux-amd64 --os=linux --arch=amd64 \
--dm-master=v6.5.0 --dm-worker=v6.5.0 --dmctl=v6.5.0 \
--alertmanager=v0.17.0 --grafana=v4.0.3 --prometheus=v4.0.3 \
--tiup=v$(tiup --version|grep 'tiup'|awk -F ' ' '{print $1}') --dm=v$(tiup --version|grep 'tiup'|awk -F ' ' '{print $1}')
b. 设置镜像和环境变量
sh tidb-dm-v6.5.0-linux-amd64/local_install.sh
source /home/tidb/.bash_profile
c. 初始化配置文件
tiup dm template > /data/tidb/topology.yaml
编辑配置文件,其中73.134.47.190部署dm-master、dm-worker
d.执行部署
tiup dm deploy dm-test v6.5.0 /data/tidb/topology.yaml --user tidb -p
e. 验证
tiup dm list
tiup dm display dm-gykj
启动集群
tiup dm start dm-gykj
tiup dm display dm-gykj
3.4数据迁移
a. 加密数据源密码
tiup dmctl -encrypt 'Root#123'
b. 数据源配置
命名规则 mysql-source-${项目简称}.yaml 示例:mysql-source-xahr.yaml
注:在全量数据迁移和增量数据迁移模式下,启动迁移任务时会进行前置检查(上游数据库权限检查、外键、主键或唯一键等等),因此需提供root用户
b.加载数据源配置文件
tiup dmctl --master-addr=73.134.47.190:8261 operate-source create mysql-source-xahr.yaml
查看数据源状态
tiup dmctl --master-addr=73.134.47.190:8261 config source xahr-test
查看数据源和dm-worker的绑定关系
tiup dmctl --master-addr=73.134.47.190:8261 operate-source show xahr-test
c. 编辑迁移任务配置文件
命名规则 task-${项目简称}.yaml 示例:task-xahr.yaml
d. 迁移任务前置检查
检查项:上游字符集、版本、外键、主键或唯一键
dump权限
REPLICATION权限、MySQL binlog配置等
tiup dmctl --master-addr=73.134.47.190:8261 check-task task-xahr.yaml
e. 启动迁移任务
tiup dmctl --master-addr=73.134.47.190:8261 start-task ./task-xahr.yaml
f. 验证任务状态
tiup dmctl --master-addr=73.134.47.190:8261 query-status ./task-xahr.yaml
g. 验证全量迁移+增量同步
查询tidb,xahr数据库和对应表数据已同步
增量同步验证
源库创建一个表插入2条数据
Tidb集群xahr库已同步
h. 全量数据迁移校验
i. 增量数据同步校验
tiup dmctl --master-addr=73.134.47.190:8261 validation start --start-time 2023-01-29T15:00:00 --mode full task-xahr
mode: full 行数据进行每列的比对
fast 判断行在下游数据库是否存在
null 不开启
3.5运维管理操作
3.5.1数据源
创建 | tiup dmctl --master-addr=73.134.47.190:8261 operate-source create ./mysql-source-xahr.yaml |
停止 | tiup dmctl --master-addr=73.134.47.190:8261 operate-source stop xahr-test |
查看绑定关系 | tiup dmctl --master-addr=73.134.47.190:8261 operate-source show ./source-mysql-xahr.yaml |
查看配置 | tiup dmctl --master-addr=73.134.47.190:8261 config source xahr-test |
查询组件信息 | tiup dmctl --master-addr=73.134.47.190:8261 list-member |
改变绑定 | tiup dmctl --master-addr=73.134.47.190:8261 transfer-source szsf-test dm-127.0.0.1-8262 |
3.5.2迁移任务
前置检查 | tiup dmctl --master-addr=73.134.47.190:8261 check-task ./task-xahr.yaml |
启动 | tiup dmctl --master-addr=73.134.47.190:8261 start-task ./task-xahr.yaml |
查询状态 | tiup dmctl --master-addr=73.134.47.190:8261 query-status |
查询详情 | tiup dmctl --master-addr=73.134.47.190:8261 query-status ./task-xahr.yaml |
暂停 | tiup dmctl --master-addr=73.134.47.190:8261 pause-task task-xahr |
恢复 | tiup dmctl --master-addr=73.134.47.190:8261 resume-task task-xahr |
停止 | tiup dmctl --master-addr=73.134.47.190:8261 stop-task task-xahr |
3.5.3迁移增量校验
开启增量校验 | tiup dmctl --master-addr=73.134.47.190:8261 validation start --start-time 2023-01-29 15:00:00 --mode full task-xahr |
增量校验状态 | tiup dmctl --master-addr=73.134.47.190:8261 validation status task-xahr |
停止增量校验 | tiup dmctl --master-addr=73.134.47.190:8261 validation stop task-xahr |
错误行信息 | tiup dmctl --master-addr=73.134.47.190:8261 validation show-error task-xahr |
清理错误行 | tiup dmctl --master-addr=73.134.47.190:8261 validation clear-error task-xahr --all |
3.5.4集群运维
3.5.4.1WebUI
通过DM WebUI页面管理迁移任务
前提条件开启OpenAPI
方法一:
拓扑文件中添加如下配置
方法二:
修改集群配置文件
tiup dm edit-config dm-gykj
重新加载集群
tiup dm reload dm-gykj -R dm-master
WebUI地址:
http://73.134.47.190:8261/dashboard
3.5.4.2 dmctl
tiup dmctl用来运维DM集群的命令行工具,交互和命令模式
3.5.4.3日常巡检
方法一:dmctl工具查看任务运行状态及错误输出
tiup dmctl --master-addr=73.134.47.190:8261 query-status
方法二:Prometheus和Grafana
通过Prometheus和Grafana查看DM相关监控项
方法三:dm-master和dm-worker日志文件
通过dm-master和dm-worker日志文件查看DM运行状态和相关错误
dm-master
dm-worker
3.5.4.4集群操作
集群列表 | tiup dm list |
启动集群 | tiup dm start dm-gykj |
集群状态 | tiup dm display dm-gykj |
集群缩容 | tiup dm scale-in dm-gykj -N 73.134.47.190:8262 |
集群扩容 | tiup dm scale-out dm-gykj ./scale-out-monitor.yaml |
更新配置 | tiup dm edit-config dm-gykj |
加载配置 | tiup dm reload dm-gykj |
补丁更新 | tiup dm patch dm-gykj /data/tidb/dm-master-hotfix.tar.gz -R dm-master |
操作日志 | tiup dm audit |
4.Dumpling和TiDB Lightning
4.1Dumpling全量导出
4.1.1安装
在线安装
tiup install dumpling
在线使用
tiup dumpling ...
离线安装
tar -zxvf dumpling-v6.5.0-linux-amd64.tar.gz
4.1.2使用
./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 --filetype sql -t 8 -o /data/ywgl/exportfile/xahr -B xahr
-t 指定导出的线程数,提高导出速度,不超过64
-F 指定单个文件的最大大小,单位MiB
--compress 压缩导出数据
整库导出
./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 --filetype sql -t 8 -o /data/ywgl/exportfile/xahr -B xahr
表导出
./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 --filetype sql -t 8 -o /data/ywgl/exportfile/xahr -T xahr.dict,xahr.dict_type,xahr.sdic_activity_info
筛选数据导出
./dumpling -uroot -pxxxxx -h 73.134.35.132 -P3306 --filetype sql -t 8 -o /data/ywgl/exportfile/xahr -T xahr.sdic_activity_info --where "id<=7"
参考脚本
dumpling.sh
#!/bin/bash START_TIME= date '+%Y-%m-%d %H:%M:%S'
START_TIME_S= date '+%s'
DUMPLING_PATH=/data/ywgl/exportfile SOURCE_IP=$1 DATABASE=$2 USER_PWD=$3
if [ -d "$DUMPLING_PATH/$DATABASE" ]; then rm -fr $DUMPLING_PATH/$DATABASE fi
cd /data/tidb-community-toolkit-v6.5.0-linux-amd64
./dumpling -uroot -p$USER_PWD -h $SOURCE_IP -P3306 --filetype sql --compress gzip -t 8 -F256MiB -o $DUMPLING_PATH/$DATABASE -B $DATABASE
END_TIME= date '+%Y-%m-%d %H:%M:%S'
END_TIME_S= date '+%s'
SUM_TIME=$[$END_TIME_S-$START_TIME_S]
echo "---------------begin:$START_TIME-- end:$END_TIME-- total:$SUM_TIME seconds---------------------"
4.2TiDB Lighning导入数据
4.2.1安装
在线安装
tiup install tidb-lightning
在线使用
tiup dumpling ...
离线安装
tar -zxvf tidb-lightning-v6.5.0-linux-amd64.tar.gz
chmod +x tidb-lightning
4.2.2前置检查
目标TiKV集群的总存储空间必须大于 数据源大小* 副本数量*2
4.2.3使用
编辑配置文件
执行导入
nohup ./tidb-lightning -config /data/ywgl/tidb-lightning-$DATABASE.toml > /dev/null 2>&1 &
参考脚本
lightning.sh
#!/bin/bash TIDB_LIGHTNING_PATH=/data/ywgl/exportfile DATABASE=$1
if [ ! -d "$TIDB_LIGHTNING_PATH/$DATABASE" ]; then echo "$DATABASE文件夹不存在" exit fi
if [ ls "$TIDB_LIGHTNING_PATH/$DATABASE" | wc -l
-eq 0 ]; then echo "$DATABASE数据文件为空" fi
cd /data/ywgl cp tidb-lightning-example.toml tidb-lightning-$DATABASE.toml sed -i "s/database/$DATABASE/g" tidb-lightning-$DATABASE.toml cd /data/tidb-community-toolkit-v6.5.0-linux-amd64 nohup ./tidb-lightning -config /data/ywgl/tidb-lightning-$DATABASE.toml > /dev/null 2>&1 & tail -f tidb-lightning-$DATABASE.log
导入监控
5.备份与恢复
5.1安装
安装br
tiup install br
安装minio
Server端
MC客户端
6.学习计划
| | | | | - | --------------------------------------------------------------------- | -- | | 1 | br备份恢复方案(备份存储的选择(NFS或者Minio);全量备份、增量备份、日志备份;全量恢复、库表恢复、PITR指定时间点恢复)和验证 | 3周 | | 2 | TiDB集群运维操作(扩缩容、升级、补丁、修改配置、) | 1周 | | 3 | TiUnitManager的使用 | 2周 | | 4 | 日常巡检(Prometheus和dashborad) | 3周 | | 5 | 使用TiCDC同步数据到下游MySQL数据库 | 1周 | | 6 | Tiflash的使用 | 2周 |