两次数据库迁移记录(mysql→tidb,tidb→tidb)
作者: tidb 菜鸟一只原文来源:https://tidb.net/blog/0c92fe80
背景
见上次写的 sysbench 压测文章,专栏 - 通过 Sysbench 在低配置低数据基础上分别压测 MySQL 和 TiDB,实际结果 TiDB 出乎我的想象。 | TiDB 社区
我们有个项目,最开始时提供的是一个主从 mysql 数据库,两台 16C64G 的主机(还有个预发环境也是 mysql 主从,2 个 4C8G 主机),后来经过上面压测之后,切换成了三台 16C64G 的云主机,混合部署的 tidb 集群,压测记录见上面的文章,但是,虽然混合部署的 tidb 集群性能相比原来的主从 mysql 数据库性能要好很多,但是压测效果还是很差,后来对机器上给的号称高性能磁盘的通过 fio 进行 io 测试后发现,还是 io 性能不过关,于是要求另换了 3 台带 ssd 的物理机来安装 tidb 集群。
备注:fio 性能测试命令示例
磁盘顺序读
fio --bs=8k --ioengine=libaio --direct=1 --rw=read --numjobs=16 --iodepth=256 --time_based --runtime=60 --group_reporting --size=10G --name=fio-seqr-vdb --filename=/data/fio_seqw
磁盘随机读
fio --bs=8k --ioengine=libaio --direct=1 --rw=randread --numjobs=16 --iodepth=256 --time_based --runtime=60 --group_reporting --size=10G --name=fio-randr-vdb --filename=/data/fio_seqr
磁盘顺序写
fio --bs=8k --ioengine=libaio --direct=1 --rw=write --numjobs=16 --iodepth=256 --time_based --runtime=60 --group_reporting --size=10G --name=fio-seqw-vdb --filename=/data/fio_randr
磁盘随机写
fio --bs=8k --ioengine=libaio --direct=1 --rw=randwrite --numjobs=16 --iodepth=256 --time_based --runtime=60 --group_reporting --size=10G --name=fio-randw-vdb --filename=/data/fio_randw
磁盘随机读写
fio --bs=8k --ioengine=libaio --direct=1 --rw=randrw --rwmixread=70 --numjobs=16 --iodepth=256 --time_based --runtime=60 --group_reporting --size=10G --name=fio-randrw-vdb --filename=/data/fio_randrw
另:如果已安装 tiup,可以通过 tiup cluster check –enable-disk 命令来针对目标磁盘的 io 进行预检查。
以下是带 ssd 的物理机部署的集群和云主机部署集群的 sysbench 压测对比记录
最终导致了两次数据库的迁移,下面记录下两次迁移的执行过程。
迁移过程
1. 首次迁移过程(MySQL 主从到 tidb)
1.1 选择迁移方式
由于我们的迁移是从 mysql 主从到 tidb,且数据量较小,选择了通过 dm 进行迁移。
1.2 安装和部署 dm
1.2.1 安装 dm 超级简单,通过 tiup 一句命令即可完成,
tiup install dm dmctl
1.2.2 部署 dm 则只需要先生成一个 dm_topology.yaml
然后通过 tiup 安装即可
tiup dm deploy dm-smk v6.5.5 ./dm_topology.yaml –user tidb -p
1.2.3 创建上游数据库 source
生成 mysql-141.yaml
注:数据库密码可以通过 tiup dmctl –encrypt “ 您的密码 ” 来生成,避免明文保存
执行命令创建 source,tiup dmctl –master-addr=10.11.141.160:8261 operate-source create mysql-141.yaml
1.2.4 创建同步任务
生成 smkdm-task.yaml
执行命令创建同步任务,tiup dmctl –master-addr 10.11.141.160:8261 start-task smkdm-task.yaml
查询任务状态,tiup dmctl –master-addr 10.11.141.160:8261 query-status smkdm
1.2.5 确定同步已实时同步,可以通过 sync_diff_inspector 进行数据比对
生成 sync.toml
./sync_diff_inspector –config=./sync.toml 执行比对
注:sync_diff_inspector 可通过如下连接下载
https://download.pingcap.org/tidb-community-toolkit-v6.5.8-linux-amd64.tar.gz
查看比对结果无异常后
1.2.6 正式切换
切换数据库需要停止业务,选择一个晚上,提前报备,切换数据库
切换步骤
首先停止同步 tiup dmctl –master-addr 10.11.141.160:8261 pause-task smkdm
修改生成应用对应的数据库连接
重启应用
验证业务正常,完成切换
第二次切换过程(tidb 到 tidb)
1.1 选择迁移方式
由于我们的迁移是从 tidb 到 tidb,也很简单,选择通过 br+ticdc 进行迁移。
1.2 部署 br 并迁移全量数据
1.2.1 准备外部存储,这里我们用 minio 来当外部存储
对应 s3 地址为:s3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://10.11.142.246:6060&force-path-style=true
1.2.2 上游关闭 gc
SET GLOBAL tidb_gc_enable=FALSE;
1.2.3 上游通过 backup 备份数据
BACKUP DATABASE * TO ‘s3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://10.11.142.246:6060&force-path-style=true’ RATE_LIMIT = 120 MB/SECOND;
记录备份完成时的 checkpoint
Destination | Size | BackupTS | Queue Time | Execution Time
s3://backup 1940403955 447850504815116289 2024-02-20 15:28:18 2024-02-20 15:28:18
1.2.4 下游通过 restore 恢复数据
RESTORE DATABASE * FROM ‘s3://backup?access-key=minio&secret-access-key=miniostorage&endpoint=http://10.11.142.246:6060&force-path-style=true’;
| Destination | Size | BackupTS | Queue Time | Execution Time |
s3://backup 1940403955 447850504815116289 447850554199638017 2024-02-20 15:31:24 2024-02-20 15:31:24
1.2.5 通过 sync-diff-inspector 校验数据
类似第一迁移,唯一的区别是需要指定上游的 snapshot
snapshot = “447850504815116289” # 配置为实际的备份时间点
1.3 部署 ticdc 同步增量数据
1.3.1 部署 ticdc 超级简单,直接生成 scale-out.yml
通过 tiup 一句 scale-out 命令即可完成,注意这里还是在上游部署的 ticdc
tiup cluster scale-out tidb-smk scale-out.yml -p
1.3.2 创建同步任务
tiup cdc cli changefeed create –server=http://10.11.141.160:8300 –sink-uri=“mysql://root:NzRiKjE1dzJwRF5aLVIrc0Uw\@10.11.142.247:4000” –changefeed-id=“upstream-to-downstream” –start-ts=“447850504815116289”
1.3.3 查看同步状态
tiup cdc cli changefeed list –server=http://10.11.141.160:8300
1.3.4 开启上游 gc
SET GLOBAL tidb_gc_enable=TRUE;
1.3.5 正式切换
切换数据库需要停止业务,选择一个晚上,提前报备,切换数据库
切换步骤
首先停止业务
停止 cdc 同步
修改应用连接数据库配置并重启应用
验证业务正常,完成切换
备注:停止 cdc 同步过程
总结
tidb 的官方文档已经非常详细,基本按照文档进行迁移不会出啥问题。
另外还是建议大家在创建数据库之前就对机器和数据库的配置进行测试和确定,以免跟我一样反复的进行数据库的迁移和切换。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/ebc69d6418505f0922790f0cf】。文章转载请联系作者。
评论