从MySQL同步数据到TiDB

一、安装(TiUP)工具

下载并安装

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

更新环境变量

source ~/.bash_profile

查看版本

tiup --version

二、安装(TiDB Data Migration)

下载安装包

tiup install dm dmctl

生成配置文件

tiup dm template > dm-topology.yaml

编辑配置文件

vim dm-topology.yaml

---
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/home/tidb/dm/deploy"
  data_dir: "/home/tidb/dm/data"

master_servers:
  - host: 192.168.0.127

worker_servers:
  - host: 192.168.0.127

monitoring_servers:
  - host: 192.168.0.127
    port: 7090

grafana_servers:
  - host: 192.168.0.127
    port: 7000

alertmanager_servers:
  - host: 192.168.0.127
    web_port: 7093
    cluster_port: 7094
  • 这里为单机模式,监控端口需要更改,不然容易与TiDB集群冲突

部署DM

tiup dm deploy dm-test v2.0.7 ./dm-topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
  • 通过 TiUP DM 部署的集群名称为 dm-test
  • 部署版本为 v2.0.7,可以通过执行 tiup list dm-master 来查看 TiUP 支持的最新版本。
  • --user root:指定具有 sudo 权限的用户完成集群部署
  • []号里的 -p-i 为可选项,若已设置免密登录就不需填写,否则选择其一。-p 进入密码交互窗口,-i指定秘钥位置

查看 TiUP 管理DM情况

tiup dm list

启动DM 集群

tiup dm start dm-test
  • 输出 Started cluster dm-test successfully 表示启动成功。

查看DM 集群信息

tiup dm display dm-test
  • Status 状态信息为 Up,说明集群状态正常;状态为 Down/inactive,表示未启动/不活跃。

三、同步MySQL数据

创建MySQL数据源

vim mysql-source-01.yaml

配置MySQL数据源

source-id: "mysql-source-01"

# DM-worker 是否使用全局事务标识符 (GTID) 拉取 binlog。使用前提是在上游 MySQL 已开启 GTID 模式。
enable-gtid: false

from:
  host: "172.16.10.81"
  user: "root"
  password: "VjX8cEeTX+qcvZ3bPaO4h0C80pe/1aU="
  port: 3306

加载配置到DM集群

tiup dmctl --master-addr 127.0.0.1:8261 operate-source create ./mysql-source-01.yaml

配置同步任务

根据不同场景,编辑任务配置文件vim task.yaml,点击查看详细配置

name: merge_task
shard-mode: "pessimistic"
task-mode: all

target-database:
  host: "127.0.0.1"
  port: 4000
  user: "root"
  password: "" 

mysql-instances:
  - source-id: "mysql-source-01"
    block-allow-list: "block-allow-01"
    route-rules: ["route-rule-01","route-rule-02"] 


block-allow-list: 
  block-allow-01:
    do-dbs: ["wisdom_test"]   
    do-tables:                       
    - db-name: "wisdom_test"             
      tbl-name: "*"

routes:
  route-rule-01:
    schema-pattern: "wisdom_test"
    target-schema: "wisdom_demo"
  route-rule-02:
    schema-pattern: "wisdom_test"
    table-pattern: "wisdom_attendance_*"
    target-schema: "wisdom_demo"
    target-table: "wisdom_attendance"

启动同步任务

tiup dmctl --master-addr 127.0.0.1:8261 start-task ./task.yaml

查询同步任务

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

删除同步任务

tiup dmctl --master-addr 127.0.0.1:8261 stop-task merge_task

解决问题步骤

1. 出现错误时,需查询任务query-status具体信息

tiup dmctl --master-addr 127.0.0.1:8261 query-status merge_task

2. 其任务stage状态为Paused

{
    "subTaskStatus": [
        {
            "name": "merge_task",
            "stage": "Paused",
            "result": {}
        }
    ]
}

3. 解决问题后,可以通过resume-task命令进行恢复

tiup dmctl --master-addr 127.0.0.1:8261 resume-task merge_task

DDL语句出错

  • 迁移过程中,上游执行了 TiDB 不支持的 DDL 语句并迁移到了 DM,造成迁移任务中断。
    • 如果业务能接受下游 TiDB 不执行该 DDL 语句,则使用 handle-error skip 跳过对该 DDL 语句的迁移以恢复迁移任务。
    • 如果业务能接受下游 TiDB 执行其他 DDL 语句来作为替代,则使用 handle-error replace 替代该 DDL 的迁移以恢复迁移任务。

重置同步任务

  1. 清空下游数据库中数据

  2. 重启 source 并关闭 gtid 或 relay

  3. 重建任务并通过 start-task task.yaml --remove-meta 重新同步,或者重命名任务名

监控同步任务

http://127.0.0.1:7000 进入 Grafana
http://127.0.0.1:7090 进入 Prometheus
http://127.0.0.1:7093 进入 Alertmanager

你可能感兴趣的:(从MySQL同步数据到TiDB)