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 中。


