[TIDB]通过TiDB DM组件同步MySQL数据库的数据到TiDB数据库

TiDB安装安装 (略)
DM数据同步组件 (略)

操作系统环境:

[root@uat-server-2 dm-worker-8262]# cat /etc/redhat-release

CentOS Linux release 7.9.2009 (Core)

[root@uat-server-2 dm-worker-8262]# uname -a

Linux uat-server-2 3.10.0-1160.59.1.el7.x86_64 #1 SMP Wed Feb 23 16:47:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux


MySQL数据库版本:

5.7.28-log MySQL Community Server (GPL)

TiDB数据库版本:

v8.5.2

DM版本:

v8.5.2


通过tidb数据库中的DM工具,配置DM,将源MySQL数据库(配置了gtid)中的big_data库中全部的表数据同步到tidb中的big_data库中,请写一下详细配置的步骤与配置文件


1. 创建数据源配置文件

首先,创建一个数据源配置文件mysql-replica-01.yaml,用于配置源 MySQL 数据库的信息。由于源 MySQL 数据库已经配置了 GTID,因此需要将 enable-gtid 设置为 true。


MySQL数据源配置:

在mysql中创建用户名和密码:

set global validate_password_policy=low;

create user tidb_sync@'%' identified by 'tidb_sync_123';

GRANT SELECT, RELOAD, PROCESS, FILE, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT, EVENT ON *.* TO 'tidb_sync'@'%';


在dm中创建数据源配置文件:

cat mysql-replica-01.yaml

# MySQL1 Configuration.

source-id: "mysql-replica-01"

# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。

enable-gtid: true

from:

host: "172.16.76.239"

user: "tidb_sync"

password: "mysql" # 推荐使用加密后的密码,如果不使用,也可以配置成功

port: 13306


注意: 密码建议使用加密后的密码,可以通过以下命令生成:


查看私钥:

[root@uat-server-2 ~]# tiup dm list

Starting component dm: /root/.tiup/components/dm/v1.16.2/tiup-dm list

Name User Version Path PrivateKey

---- ---- ------- ---- ----------

dm-uat tidb v8.5.2 /root/.tiup/storage/dm/clusters/dm-uat /root/.tiup/storage/dm/clusters/dm-uat/ssh/id_rsa

集群的私钥如下:

/root/.tiup/storage/dm/clusters/dm-uat/ssh/id_rsa


[root@uat-server-2 ~]# tiup dmctl --master-addr=172.16.76.239:8261 --ssl-key /root/.tiup/storage/dm/clusters/dm-uat/ssh/id_rsa encrypt tidb_sync_123


tiup dmctl --encrypt 'tidb_sync_123'


将源信息加入到dm-master集群中:

tiup dmctl --master-addr=172.16.76.239:8261 operate-source create mysql-replica-01.yaml



A new version of dmctl is available: v6.1.0 -> v8.0.0


To update this component: tiup update dmctl

To update all components: tiup update --all


Starting component dmctl: /home/tidb/.tiup/components/dmctl/v6.1.0/dmctl/dmctl --master-addr=172.16.76.239:8261 operate-source create source-mysql-01.yaml

{

"result": true,

"msg": "",

"sources": [

{

"result": true,

"msg": "",

"source": "mysql-replica-01",

"worker": "dm-172.16.1.201-8262"

}

]

}


查看所有的源配置文件:

[tidb@node201 ~]$ tiup dmctl --master-addr=172.16.76.239:8261 operate-source show


A new version of dmctl is available: v6.1.0 -> v8.0.0


To update this component: tiup update dmctl

To update all components: tiup update --all


Starting component dmctl: /home/tidb/.tiup/components/dmctl/v6.1.0/dmctl/dmctl --master-addr=172.16.76.239:8261 operate-source show

{

"result": true,

"msg": "",

"sources": [

{

"result": true,

"msg": "",

"source": "mysql-replica-01",

"worker": "dm-172.16.1.201-8262"

}

]

}


只查看指定的数据源:

tiup dmctl --master-addr=172.16.76.239:8261 get-config source mysql-replica-01


[tidb@node201 ~]$ tiup dmctl --master-addr=172.16.76.239:8261 get-config source mysql-replica-01


A new version of dmctl is available: v6.1.0 -> v8.0.0


To update this component: tiup update dmctl

To update all components: tiup update --all


Starting component dmctl: /home/tidb/.tiup/components/dmctl/v6.1.0/dmctl/dmctl --master-addr=172.16.76.239:8261 get-config source mysql-replica-01

{

"result": true,

"msg": "",

"cfg": "enable: true\nenable-gtid: false\nauto-fix-gtid: false\nrelay-dir: relay-dir\nmeta-dir: \"\"\nflavor: mysql\ncharset: \"\"\nenable-relay: false\nrelay-binlog-name: \"\"\nrelay-binlog-gtid: \"\"\nsource-id: mysql-replica-01\nfrom:\n host: 172.16.1.234\n port: 3306\n user: root\n password: '******'\n max-allowed-packet: null\n session: {}\n security: null\npurge:\n interval: 3600\n expires: 0\n remain-space: 15\nchecker:\n check-enable: true\n backoff-rollback: 5m0s\n backoff-max: 5m0s\n check-interval: 5s\n backoff-min: 1s\n backoff-jitter: true\n backoff-factor: 2\nserver-id: 429591543\ntracer: {}\ncase-sensitive: false\nfilters: []\n"

}




2. 配置任务文件

接下来,编辑任务配置文件 mysql-to-tidb-with-db-big_data.yaml,用于配置从源 MySQL 数据库到目标 TiDB 数据库的数据同步任务。


# 任务名,多个同时运行的任务不能重名. (全库同步脚本)

cat mysql-to-tidb-with-db-big_data.yaml

name: "big_data_sync"

# 全量+增量 (all) 迁移模式。

task-mode: "all"

# 下游 TiDB 配置信息。

target-database:

host: "172.16.76.239"

port: 4000

user: "root"

password: "nsy_123" # 推荐使用加密后的密码

# 当前数据迁移任务需要的全部上游 MySQL 实例配置。

mysql-instances:

# 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。

- source-id: "mysql-replica-01"

# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。

block-allow-list:

bw_rule-1:

do-dbs: ["big_data.*"]

[root@uat-server-2 dm]# vim mysql-to-tidb-with-db-big_data.yaml

[root@uat-server-2 dm]# cat mysql-to-tidb-with-db-big_data.yaml

name: "big_data_sync"

# 全量+增量 (all) 迁移模式。

task-mode: "all"

# 下游 TiDB 配置信息。

target-database:

host: "172.16.76.239"

port: 4000

user: "root"

password: "nsy_123" # 推荐使用加密后的密码

# 当前数据迁移任务需要的全部上游 MySQL 实例配置。

mysql-instances:

# 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。

- source-id: "mysql-replica-01"

block-allow-list: "bw_rule-1"

# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。

block-allow-list:

bw_rule-1:

do-dbs: ["big_data"]


3. 预检查

在启动任务之前,建议先进行预检查,确保配置无误。

tiup dmctl --master-addr 172.16.76.239:8261 check-task mysql-to-tidb-with-db-big_data.yaml

如果预检查通过,将会返回类似以下的结果:

{

"result": true,

"msg": "pre-check is passed."

}


4. 启动任务

预检查通过后,可以启动数据同步任务。

tiup dmctl --master-addr 172.16.76.239:8261 start-task mysql-to-tidb-with-db-big_data.yaml



启动成功后,可以查看任务状态以确认数据同步是否正常进行。

tiup dmctl --master-addr 172.16.76.239:8261 query-status big_data_sync



预检查配置文件是否有效

tiup dmctl --master-addr 172.16.76.239:8261 start-task mysql-to-tidb-with-db-big_data.yaml


开启任务:

[root@uat-server-2 dm]# tiup dmctl --master-addr 172.16.76.239:8261 start-task mysql-to-tidb-with-db-big_data.yaml

停止任务:

[root@uat-server-2 dm]# tiup dmctl --master-addr 172.16.76.239:8261 stop-task mysql-to-tidb-with-db-big_data.yaml

查询所有任务的状态:

tiup dmctl --master-addr 172.16.76.239:8261 query-status





删除任务:

登录tidb数据库,删除dm_meta目录中对应的表名:


注意:

如果是全量同步数据,TIDB会先全量导出数据到以下目录中:

[root@uat-server-2 dm-worker-8262]# pwd

/data/tidb/dm/deploy/dm-worker-8262

[root@uat-server-2 dm-worker-8262]# cd dumped_data.big_data_sync/

[root@uat-server-2 dumped_data.big_data_sync]# ls

big_data.async_process_flow.0000000000000.sql big_data.logistics_receive_record.0000000000000.sql

big_data.async_process_flow.0000000000001.sql big_data.logistics_receive_record-schema.sql

big_data.async_process_flow.0000000000002.sql big_data.print_template.0000000000000.sql

 

要注意这个目录下的磁盘空间使用情况:


将数据DUMP完成后,才会插入到tidb目标数据库中



5. 验证

最后,登录到 TiDB 数据库中,验证数据是否已成功同步。

/opt/mysql5729/bin/mysql -h 172.16.76.239 -uroot -pmysql -P4000

在 TiDB 中执行以下 SQL 查询,确认 big_data库中的表数据是否已同步:


SHOW DATABASES;

USE big_data;

SHOW TABLES;

SELECT COUNT(*) FROM your_table_name; -- 替换为实际的表名

通过以上步骤,您可以成功地将源 MySQL 数据库中的 big_data 库的所有表数据同步到 TiDB 中。



分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS