TiDB亿级数据亚秒响应查询将MySql数据同步到TiDB

news2024/11/23 10:22:05

目录

  • 1 MySQL环境准备
    • 1.1 MySQL测试数据库
      • 1.1.1 导入数据
      • 1.1.2 验证是否成功
  • 2 DM数据迁移
    • 2.1 TiUP DM 组件简介
      • 2.1.1 基本功能
      • 2.1.2 使用限制
    • 2.2 TiUP安装 DM组件
      • 2.2.1 安装TiUP DM 组件
      • 2.2.2 更新 TiUP DM 组件
    • 2.3 TiUP部署 DM组件
      • 2.3.1 编辑初始化配置
      • 2.3.2 部署命令格式
      • 2.3.3 检查最新版本DM组件
      • 2.3.4 执行部署命令
      • 2.3.5 TiUP 查看集群情况
      • 2.3.6 检查部署的 DM 集群
      • 2.3.7 启动集群
      • 2.3.8 验证集群运行状态
    • 2.4 安装dmctl 运维组件
      • 2.4.1 检查dmctl最新版本
      • 2.4.2 安装dmctl组件
    • 2.5 使用 DM 迁移数据
      • 2.4.1 需要的权限
      • 2.4.2 MySQL服务授权
      • 2.4.3 打开mysql的binlog
      • 2.4.4 MySQL检查
      • 2.4.5 加密数据库密码
      • 2.4.6 检查集群信息
      • 2.4.7 创建数据源
      • 2.4.8 MySql数据源加入到DM集群
      • 2.4.9 配置任务
      • 2.4.10 MySQL 实例配置前置检查
      • 2.4.11 开启任务
      • 2.4.12 查询任务
      • 2.4.13 查询迁移详情
    • 2.5 检查全量同步
      • 2.5.1 登录TIDB
      • 2.5.2 查看employees数据库
    • 2.6 测试增量同步
      • 2.6.1 插入MySQL数据
      • 2.6.2 更新MySQL数据
      • 2.6.3 查看DM的任务状态
      • 2.6.4 检查增量同步数据
    • 2.7 DM的其他操作
      • 2.7.1 暂停数据迁移任务
      • 2.7.2 恢复数据迁移任务
      • 2.7.3 停止数据迁移任务


1 MySQL环境准备

在这里插入图片描述

1.1 MySQL测试数据库

Mysql 官方提供了了一套名为:Employees Sample Database 的测试库(该测试库含有6个表,总计4百万数据记录)

表结构

在这里插入图片描述

在这里插入图片描述

1.1.1 导入数据

下载后解压 test_db-master.zip,然后登录 mysql 导入即可

[mysqld]
##bin-log settings##
#show variables like 'log_%';
log_bin=mysql-bin
server_id=1
binlog_format=ROW

# 创建MySQL数据库
[root@linux30 tidb]# docker run --name mysql-tidb -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /opt/tidb/mysql:/opt -v /opt/tidb/etc/mysql:/etc/mysql  mysql:5.7.38
b59ff5c7a4836a2f13c4863842fa73a87c2980efa5537c06c0946d35d47dc392
[root@linux30 tidb]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
b59ff5c7a483   mysql:8.0.22   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql-tidb
[root@linux30 tidb]# docker exec -it mysql-tidb bash
root@b59ff5c7a483:/# cd /opt/test_db-master/ && ls
Changelog                      images                  load_salaries1.dump  sakila                  test_versions.sh
README.md                      load_departments.dump   load_salaries2.dump  show_elapsed.sql
employees.sql                  load_dept_emp.dump      load_salaries3.dump  sql_test.sh
employees_partitioned.sql      load_dept_manager.dump  load_titles.dump     test_employees_md5.sql
employees_partitioned_5.1.sql  load_employees.dump     objects.sql          test_employees_sha.sql
root@b59ff5c7a483:/opt/test_db-master# mysql -uroot -p123456 < employees.sql

在这里插入图片描述

1.1.2 验证是否成功

root@b59ff5c7a483:/opt/test_db-master# mysql -uroot -p123456 < test_employees_md5.sql

在这里插入图片描述

2 DM数据迁移

2.1 TiUP DM 组件简介

	TiDB Data Migration (DM) 是一体化的数据迁移任务管理工具,支持从与 MySQL 协议兼容的数据库(MySQL、MariaDB、Aurora MySQL)到 TiDB 的数据迁移,DM 工具旨在降低数据迁移的运维成本。

2.1.1 基本功能

在这里插入图片描述

Block & allow lists

上游数据库实例表的黑白名单过滤规则,可以用来过滤或者只迁移某些 database/table 的所有操作。

	Block & Allow Lists 的过滤规则类似于 MySQL `replication-rules-db`/`replication-rules-table`,用于过滤或指定只迁移某些数据库或某些表的所有操作。
block-allow-list:             # 如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list。
  rule-1:
    do-dbs: ["test*"]         # 非 ~ 字符开头,表示规则是通配符;v1.0.5 及后续版本支持通配符规则。
     do-tables:
    - db-name: "test[123]"    # 匹配 test1、test2、test3。
      tbl-name: "t[1-5]"      # 匹配 t1、t2、t3、t4、t5。
    - db-name: "test"
      tbl-name: "t"
  rule-2:
    do-dbs: ["~^test.*"]      # 以 ~ 字符开头,表示规则是正则表达式。
     ignore-dbs: ["mysql"]
    do-tables:
    - db-name: "~^test.*"
      tbl-name: "~^t.*"
    - db-name: "test"
      tbl-name: "t"
    ignore-tables:
    - db-name: "test"
      tbl-name: "log"
  • do-dbs:要迁移的库的白名单,类似于 MySQL 中的 replicate-do-db
  • ignore-dbs:要迁移的库的黑名单,类似于 MySQL 中的 replicate-ignore-db
  • do-tables:要迁移的表的白名单,类似于 MySQL 中的 replicate-do-table
  • ignore-tables:要迁移的表的黑名单,类似于 MySQL 中的 replicate-ignore-table

以上参数值以 ~ 开头时均支持使用正则表达式来匹配库名、表名。

Binlog event filter

Binlog event filter 是比迁移表黑白名单更加细粒度的过滤规则,可以指定只迁移或者过滤掉某些 schema / table 的指定类型 binlog,比如 INSERTTRUNCATE TABLE

	Binlog Event Filter 用于过滤源数据库中特定表的特定类型操作,比如过滤掉表 `test`.`sbtest` 的 `INSERT` 操作或者过滤掉库 `test` 下所有表的 `TRUNCATE TABLE` 操作。
filters:
  rule-1:
    schema-pattern: "test_*"
      table-pattern: "t_*"
      events: ["truncate table", "drop table"]
      sql-pattern: ["^DROP\\s+PROCEDURE", "^CREATE\\s+PROCEDURE"]
      action: Ignore
  • schema-pattern/table-pattern:对匹配上的上游 MySQL/MariaDB 实例的表的 binlog events 或者 DDL SQL 语句通过以下规则进行过滤。

  • events:binlog events 数组,仅支持从以下 Event 中选择一项或多项。

    Event分类解释
    all代表包含下面所有的 events
    all dml代表包含下面所有 DML events
    all ddl代表包含下面所有 DDL events
    none代表不包含下面所有 events
    none ddl代表不包含下面所有 DDL events
    none dml代表不包含下面所有 DML events
    insertDMLinsert DML event
    updateDMLupdate DML event
    deleteDMLdelete DML event
    create databaseDDLcreate database event
    drop databaseDDLdrop database event
    create tableDDLcreate table event
    create indexDDLcreate index event
    drop tableDDLdrop table event
    truncate tableDDLtruncate table event
    rename tableDDLrename table event
    drop indexDDLdrop index event
    alter tableDDLalter table event
  • sql-pattern:用于过滤指定的 DDL SQL 语句,支持正则表达式匹配,例如上面示例中的 "^DROP\\s+PROCEDURE"

Table routing

Table routing 提供将上游 MySQL/MariaDB 实例的某些表迁移到下游指定表的功能。

	Table Routing 是将源数据库的表迁移到下游指定表的路由功能,比如将源数据表 `test`.`sbtest1` 的数据同步到 TiDB 的表 `test`.`sbtest2`。它也是分库分表合并迁移所需的一个核心功能。
routes:
  rule-1:
    schema-pattern: "test_*"
    table-pattern: "t_*"
    target-schema: "test"
    target-table: "t"
  rule-2:
    schema-pattern: "test_*"
    target-schema: "test"

2.1.2 使用限制

数据库版本

  • 5.5 < MySQL 版本 < 8.0
  • MariaDB 版本 >= 10.1.2

DDL 语法兼容性

  • 目前,TiDB 部分兼容 MySQL 支持的 DDL 语句。因为 DM 使用 TiDB parser 来解析处理 DDL 语句,所以目前仅支持 TiDB parser 支持的 DDL 语法
  • DM 遇到不兼容的 DDL 语句时会报错。要解决此报错,需要使用 dmctl 手动处理,要么跳过该 DDL 语句,要么用指定的 DDL 语句来替换它

2.2 TiUP安装 DM组件

2.2.1 安装TiUP DM 组件

[root@linux30 tidb]# tiup install dm

2.2.2 更新 TiUP DM 组件

如果已经安装,则更新 TiUP DM 组件至最新版本:

[root@linux30 tidb]# tiup update --self && tiup update dm

预期输出 Update successfully! 字样。

在这里插入图片描述

2.3 TiUP部署 DM组件

在这里插入图片描述

2.3.1 编辑初始化配置

需要根据不同的集群拓扑,编辑 TiUP 所需的集群初始化配置文件。

新建一个配置文件 topology.yaml,部署 1 个 DM-master、1个 DM-worker 的配置如下

[root@linux30 tidb]# vi topology.yaml

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/opt/tidb/tidb-deploy/dm"
  data_dir: "/opt/tidb/tidb-data/dm"
  # arch: "amd64"

master_servers:
  - host: 192.168.10.30

worker_servers:
  - host: 192.168.10.30

注意:

  • 如果不需要确保 DM 集群高可用,则可只部署 1 个 DM-master 节点,且部署的 DM-worker 节点数量不少于上游待迁移的 MySQL/MariaDB 实例数。
  • 如果需要确保 DM 集群高可用,则推荐部署 3 个 DM-master 节点,且部署的 DM-worker 节点数量大于上游待迁移的 MySQL/MariaDB 实例数(如 DM-worker 节点数量比上游实例数多 2 个)。

2.3.2 部署命令格式

通过 TiUP 进行集群部署可以使用密钥或者交互密码方式来进行安全认证:

  • 如果是密钥方式,可以通过 -i 或者 --identity_file 来指定密钥的路径;
  • 如果是密码方式,可以通过 -p 进入密码交互窗口;
  • 如果已经配置免密登录目标机,则不需填写认证。
tiup dm deploy dm-test ${version} ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

以上部署命令中:

  • 通过 TiUP DM 部署的集群名称为 dm-test
  • --user root:通过 root 用户登录到目标主机完成集群部署,该用户需要有 ssh 到目标机器的权限,并且在目标机器有 sudo 权限。也可以用其他有 ssh 和 sudo 权限的用户完成部署。
  • -i-p:非必选项,如果已经配置免密登录目标机,则不需填写,否则选择其一即可。-i 为可登录到目标机的 root 用户(或 --user 指定的其他用户)的私钥,也可使用 -p 交互式输入该用户的密码。

预期日志结尾输出会有 Deployed clusterdm-testsuccessfully 关键词,表示部署成功。

2.3.3 检查最新版本DM组件

部署版本为 ${version},可以通过执行 tiup list dm-master 来查看 TiUP 支持的最新版本

[root@linux30 tidb]# tiup list dm-master

在这里插入图片描述

我们发现有个版本是v5.3.0

2.3.4 执行部署命令

[root@linux30 tidb]# tiup dm deploy dm-test 5.3.0 ./topology.yaml --user root -p

出现如下界面,选择y继续,输入密码后继续安装

在这里插入图片描述

继续安装后,安装完成后输出deployed successfully代表安装完成

在这里插入图片描述

2.3.5 TiUP 查看集群情况

TiUP 支持管理多个 DM 集群,该命令会输出当前通过 TiUP DM 管理的所有集群信息,包括集群名称、部署用户、版本、密钥信息等

[root@linux30 tidb]# tiup dm list

在这里插入图片描述

2.3.6 检查部署的 DM 集群

执行如下命令检查 dm-test 集群情况

[root@linux30 tidb]# tiup dm display dm-test

在这里插入图片描述

预期输出包括 dm-test 集群中实例 ID、角色、主机、监听端口和状态(由于还未启动,所以状态为 Down/inactive)、目录信息。

2.3.7 启动集群

预期结果输出 Started clusterdm-testsuccessfully 表示启动成功。

[root@linux30 tidb]# tiup dm start dm-test

在这里插入图片描述

2.3.8 验证集群运行状态

在输出结果中,如果 Status 状态信息为 Up,说明集群状态正常。

[root@linux30 tidb]# tiup dm display dm-test

在这里插入图片描述

2.4 安装dmctl 运维组件

dmctl 是用来运维 DM 集群的命令行工具,支持交互模式和命令模式。

2.4.1 检查dmctl最新版本

通过如下命令可用查看dmctl版本列表

[root@linux30 tidb]# tiup list dmctl

我们发现一个版本是 v5.3.0

在这里插入图片描述

2.4.2 安装dmctl组件

通过如下命令可用安装dmctl组件,冒号后面是需要安装的版本号

[root@linux30 tidb]# tiup install dmctl:v5.3.0

在这里插入图片描述

2.5 使用 DM 迁移数据

2.4.1 需要的权限

  • SELECT
  • RELOAD
  • LOCK TABLES
  • REPLICATION CLIENT
  • REPLICATION SLAVE

2.4.2 MySQL服务授权

#创建tidb用户密码是 tidb并授权外部所以IP可以访问
mysql> CREATE USER 'tidb'@'%' IDENTIFIED BY 'tidb';
Query OK, 0 rows affected (0.02 sec)
# 授权SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT 权限给tidb用户
mysql> GRANT SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'tidb'@'%';
Query OK, 0 rows affected (0.01 sec)
# 刷新数据库
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

2.4.3 打开mysql的binlog

因为DM同步需要MySQL开启binlog日志,修改my.cnf配置文件,并重启

[mysqld]
##bin-log settings##
#show variables like 'log_%';
log_bin=mysql-bin
server_id=1
binlog_format=ROW

2.4.4 MySQL检查

x
SHOW VARIABLES LIKE '%server_id%';
show variables like 'log_bin%';
show variables like 'binlog_format';

在这里插入图片描述

2.4.5 加密数据库密码

在 DM 相关配置文件中,推荐使用经 dmctl 加密后的密码,对于同一个原始密码,每次加密后密码不同。

[root@linux30 tidb]# tiup dmctl -encrypt 'tidb'

在这里插入图片描述

加密后的密码是:l5nO6geu58/BjrOOZpAtAkAjsn/q

2.4.6 检查集群信息

使用 TiUP 部署 DM 集群后,相关配置信息如下:

在这里插入图片描述

  • DM 集群相关组件配置信息
组件主机端口
dm_worker192.168.10.308262
dm_master192.168.10.308261
  • 上下游数据库实例相关信息
数据库实例主机端口用户名加密密码
上游 MySQL192.168.10.303306tidbl5nO6geu58/BjrOOZpAtAkAjsn/q
下游 TiDB192.168.10.304000root

在这里插入图片描述

2.4.7 创建数据源

将 MySQL 的相关信息写入到 mysql.yaml

[root@linux30 tidb]# vi mysql.yaml

# MySQL1 Configuration.

source-id: "mysql-replica"

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

from:
  host: "192.168.10.30"
  user: "tidb"
  password: "l5nO6geu58/BjrOOZpAtAkAjsn/q"
  port: 3306

2.4.8 MySql数据源加入到DM集群

在终端中执行下面的命令,使用 tiup dmctl 将 MySQL 的数据源配置加载到 DM 集群中:

[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 operate-source create mysql.yaml

出现如下界面返回true表示添加到集群成功

在这里插入图片描述

2.4.9 配置任务

假设需要将 MySQL实例的 employees 库的 所有 表以全量+增量的模式迁移到下游 TiDB 的 employees 库 编辑任务配置文件 sync_task.yaml

[root@linux30 tidb]# vi sync_task.yaml

# 任务名,多个同时运行的任务不能重名。
name: "tidb_sync"
# 全量+增量 (all) 迁移模式。
task-mode: "all"
# 下游 TiDB 配置信息。
target-database:
  host: "192.168.10.30"
  port: 4000
  user: "root"
  password: ""

# 黑白名单全局配置,各实例通过配置项名引用。
#block-allow-list:                     # 如果 DM 版本 <= v2.0.0-beta.2 则使用 black-white-list。
#  global:
#    do-tables:                        # 需要迁移的上游表的白名单。
#    - db-name: "test_db"              # 需要迁移的表的库名。
#      tbl-name: "test_table"          # 需要迁移的表的名称。

block-allow-list:
  ba-rule1:
    do-dbs: ["employees"]

# 当前数据迁移任务需要的全部上游 MySQL 实例配置。
mysql-instances:
# 上游实例或者复制组 ID,参考 `inventory.ini` 的 `source_id` 或者 `dm-master.toml` 的 `source-id 配置`。
  - source-id: "mysql-replica"
# 需要迁移的库名或表名的黑白名单的配置项名称,用于引用全局的黑白名单配置,全局配置见下面的 `block-allow-list` 的配置。
    block-allow-list:  "ba-rule1"

2.4.10 MySQL 实例配置前置检查

为了提前发现数据迁移任务的一些配置错误,DM 中增加了前置检查功能:

  • 启动数据迁移任务时,DM 自动检查相应的权限和配置。
  • check-task 命令用于对上游 MySQL 实例配置是否满足 DM 要求进行前置检查。
[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 check-task sync_task.yaml

如果出现返回结果是true表示检查成功

在这里插入图片描述

2.4.11 开启任务

使用 tiup dmctl 执行以下命令启动数据迁移任务。其中,sync_task.yaml 是之前编辑的配置文件。

[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 start-task sync_task.yaml

返回结果为true表示启动成功

在这里插入图片描述

2.4.12 查询任务

如需了解 DM 集群中是否存在正在运行的迁移任务及任务状态等信息,可使用 tiup dmctl 执行以下命令进行查询:

[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 query-status

query-status 命令的查询结果、任务状态与子任务状态

在这里插入图片描述

2.4.13 查询迁移详情

[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 query-status tidb_sync

任务详情如下

在这里插入图片描述

同步文本详情如下


{
    "result": true,      # 查询是否成功
    "msg": "",           # 查询失败原因描述 
    "sources": [         # 上游 MySQL 列表
        {
            "result": true,
            "msg": "",
            "sourceStatus": {            # 上游 MySQL 的信息
                "source": "mysql-replica",
                "worker": "dm-192.168.64.152-8262",
                "result": null,
                "relayStatus": null
            },
            "subTaskStatus": [                      # 上游 MySQL 所有子任务的信息
                {
                    "name": "tidb_sync",            # 子任务名称
                    "stage": "Running",             # 子任务运行状态,包括 “New”,“Running”,“Paused”,“Stopped” 以及 “Finished”
                    "unit": "Sync",                 # DM 的处理单元,包括 “Check”,“Dump“,“Load” 以及 “Sync”
                    "result": null,                 # 子任务失败时显示错误信息
                    "unresolvedDDLLockID": "",      # sharding DDL lock ID,可用于异常情况下手动处理 sharding DDL lock
                    "sync": {                       # 当前 `Sync` 处理单元的迁移信息
                        "totalEvents": "0",         # 该子任务中迁移的 binlog event 总数
                        "totalTps": "0",            # 该子任务中每秒迁移的 binlog event 数量
                        "recentTps": "0",           # 该子任务中最后一秒迁移的 binlog event 数量
                        "masterBinlog": "(mysql-bin.000001, 154)",  # 上游数据库当前的 binlog position
                        "masterBinlogGtid": "",                     # 上游数据库当前的 GTID 信息
                        "syncerBinlog": "(mysql-bin.000001, 154)",  # 已被 `Sync` 处理单元迁移的 binlog position
                        "syncerBinlogGtid": "",                     # 使用 GTID 迁移的 binlog position
                        "blockingDDLs": [           # 当前被阻塞的 DDL 列表。该项仅在当前 DM-worker 所有上游表都处于 “synced“ 状态时才有数值,此时该列表包含的是待执行或待跳过的 sharding DDL 语句
                        ],
                        "unresolvedGroups": [       # 没有被解决的 sharding group 信息
                        ],
                        "synced": true,             # 增量复制是否已追上上游。由于后台 `Sync` 单元并不会实时刷新保存点,当前值为 “false“ 并不一定代表发生了迁移延迟
                        "binlogType": "remote"  
                    }
                }
            ]
        }
    ]
}

2.5 检查全量同步

2.5.1 登录TIDB

登录TiDB 查看数据库是否同步

[root@linux30 tidb]# mysql -uroot -p -P 4000 -h 192.168.10.30

在这里插入图片描述

2.5.2 查看employees数据库

show databases;
use employees;
show tables;

我们发现数据库已经同步

在这里插入图片描述

2.6 测试增量同步

2.6.1 插入MySQL数据

部门表插入一条数据

mysql> INSERT INTO employees.`departments`(dept_no,dept_name)VALUES('d010','test dept');
Query OK, 1 row affected (0.01 sec)

2.6.2 更新MySQL数据

dept_emp中的d001改为d010


UPDATE employees.dept_emp SET dept_no='d010' WHERE dept_no='d001';

共 20211 行受到影响

在这里插入图片描述

2.6.3 查看DM的任务状态

[root@linux30 tidb]# tiup dmctl --master-addr 192.168.10.30:8261 query-status tidb_sync

“synced”: false正在同步

在这里插入图片描述

稍等后在进行查看任务状态,发现已经同步完成

在这里插入图片描述

2.6.4 检查增量同步数据

登录MySQL后检查MySQL中的数据是否同步到TiDB

[root@linux30 tidb]# mysql -uroot -p -P 4000 -h 192.168.10.30
MySQL [employees]> use employees;
MySQL [employees]> SELECT COUNT(1) FROM dept_emp WHERE dept_no='d010';
+----------+
| COUNT(1) |
+----------+
|    20211 |
+----------+
1 row in set (0.01 sec)

我们发现d010的更新数据都已经同步过来了

2.7 DM的其他操作

2.7.1 暂停数据迁移任务

pause-task 命令用于暂停数据迁移任务。

有关 pause-taskstop-task 的区别如下

  • 使用 pause-task 仅暂停迁移任务的执行,但仍然会在内存中保留任务的状态信息等,且可通过 query-status 进行查询;使用 stop-task 会停止迁移任务的执行,并移除内存中与该任务相关的信息,且不可再通过 query-status 进行查询,但不会移除已经写入到下游数据库中的数据以及其中的 checkpoint 等 dm_meta 信息。
  • 使用 pause-task 暂停迁移任务期间,由于任务本身仍然存在,因此不能再启动同名的新任务,且会阻止对该任务所需 relay log 的清理;使用 stop-task 停止任务后,由于任务不再存在,因此可以再启动同名的新任务,且不会阻止对 relay log 的清理。
  • pause-task 一般用于临时暂停迁移任务以排查问题等;stop-task 一般用于永久删除迁移任务或通过与 start-task 配合以更新配置信息。
tiup dmctl --master-addr 192.168.64.152:8261 pause-task tidb_sync

在这里插入图片描述

2.7.2 恢复数据迁移任务

resume-task 命令用于恢复处于 Paused 状态的数据迁移任务,通常用于在人为处理完造成迁移任务暂停的故障后手动恢复迁移任务。

tiup dmctl --master-addr 192.168.64.152:8261 resume-task tidb_sync

在这里插入图片描述

2.7.3 停止数据迁移任务

stop-task 命令用于停止数据迁移任务

tiup dmctl --master-addr 192.168.64.152:8261 stop-task tidb_sync

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PID算法:增量式PID 位置式PID

前面的文章已经介绍过什么是pid了&#xff0c;现在再回顾一下&#xff1a; PID&#xff1a;是过程控制中常用的一种针对某个对象或者参数进行自动控制的一种算法。 这一篇分享不打算再深究pid的理论知识&#xff0c;如果有不懂或者对pid感兴趣的朋友&#xff0c;可以自行查阅资…

【docker桌面版】windows使用docker搭建nginx

1.拉取nginx镜像 docker pull nginx 2.运行容器 docker run -d -p 80:8081 --name nginx nginx 3.本地磁盘创建nginx目录 D:\Docker\project\nginx 4.复制docker中的nginx配置文件 查看运行的容器docker ps -a docker cp 8f18d58bc77b:/etc/nginx/nginx.conf D:\Docker…

【Leetcode】DP | 打家劫舍,当一个机灵的小偷

198 打家劫舍 令 D [ i ] D[i] D[i]表示前 i i i间房子的最大收益&#xff1a; D [ i ] max ⁡ ( D [ i − 1 ] , D [ i − 2 ] n u m s [ i ] ) D [ 0 ] n u m s [ 0 ] D [ 1 ] max ⁡ ( n u m s [ 0 ] , n u m s [ 1 ] ) D[i] \max(D[i -1], D[i-2]nums[i]) \\ D[0] …

软件测试工程师如何从功能测试转成自动化测试?

功能测试转成自动化测试&#xff0c;答案就三个字&#xff1a;“靠学习”。 学习自动化的方法无非是三种&#xff1a; 一、靠培训&#xff08;下方有如何选择培训机构&#xff09; 在相对有氛围的学习环境中来学习自动化测试&#xff0c;这是一个较快学习的方法。二、靠自学自…

js文件引入vue $notify组件,自定义添加按钮功能!

import Vue from vue; //新创建一个vue实例 let v new Vue(); const h v.$createElement console.log(h) v.$notify({ dangerouslyUseHTMLString: true, message: h( div, {}, [ h(p, {}, [ h(p, {style:"font-size: 15px;"}, 车架号&#xff1a;${res.rows[0].…

C# Winform 多个程序之间的通信(非Scoket)

效果 功能&#xff1a;打开窗体自动连接主程序&#xff0c;并自动添加到列表&#xff0c;可以向子程序群发消息 可以向单个程序单独发送消息 在退出程序后&#xff0c;添加的程序列表会自动移除 一、概述 参考&#xff1a;C# Winfrom程序之间通讯_c# sendmessege copydatastr…

x宝评论抓取

#某宝评论接口sign参数逆向 1.接口速览 多次请求发现&#xff0c;t为时间戳&#xff0c;sign为加密参数&#xff0c;盲猜和data、t有关&#xff0c;sign为32位&#xff0c;盲猜是字符串的32位的MD5 2.搜索js代码 这里为搜索的是appKey&#xff0c;就找到了sign&#xff0c;然…

如何实现APP自动化测试?

APP测试&#xff0c;尤其是APP的自动化测试&#xff0c;在软件测试工程师的面试中越来越会被问到了。为了更好的回答这个问题&#xff0c;我今天就给大家分享一下&#xff0c;如何进行APP的自动化测试。 一、为了实现JavaAppiumJunit技术用于APP自动化测试&#xff0c;所以需要…

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

接口测试实战工具如何选择?这6个工具首选(建议收藏)

常见接口类型 • HTTP/HTTPS 类型接口 基于HTTP协议开发的接口现在应用是最为广泛的&#xff0c;这类API使用起来简单明了&#xff0c;因为它是轻量级的、跨平台、跨语言的&#xff0c; 但凡是第三方提供的API都会有HTTP版本的接口。 RESTful API也是基于HTTP协议的&#xff0c…

Android滴滴路由框架DRouter原理解析

作者&#xff1a;linversion 前言 最近的一个新项目使用了Clean Architecture模块化MVVM架构&#xff0c;将首页每个tab对应的功能都放到单独的模块且不相互依赖&#xff0c;这时就有了模块间页面跳转的问题&#xff0c;经过一番研究选择了滴滴的DRouter&#xff0c;因为其出色…

Image captioning中自定义文本数据整理为类似Flickr8k.token.txt的格式--->助力后期生成JSON格式用于训练

手把手实现Image captioning,将自定义文本数据整理为类似Flickr8k.token.txt的格式,助力后期生成JSON格式用于训练。如果感觉有用,不妨给博主来个一键三连,白天科研,晚上肝文,实属不易~ ~ ](https://imgse.com/i/p9FmMDK) 这里写目录标题 1. 任务需求2. 程序实现2.1 读取…

vistual studio 2017中导入pthread.h的配置方法

1.下载pthread.h的相关库文件 下载路径 https://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip 加压后得到两种系统版本的三个文件夹 pthreads.2 : 包含了pthread的源文件 Pre-built2 :包含了pthreads for win32的头文件…

软件测试04:软件测试流程和软件测试过程

软件测试04&#xff1a;软件测试流程和软件测试过程 软件测试流程 软件测试流程&#xff1a;获取测试需求->编写测试计划->制造测试方案->开发与设计测试用例->执行测试->提交缺陷报告->测试分析与评审->提交测试总结->准备下一版本测试 软件测试过…

网页JS自动化脚本(九)创建一键导出数据库到桌面的功能按钮

我们获取到了数据库,当然我们希望能把这个数据库给保存到本地电脑上进行一些数据的处理,我们这一节就添加一个按钮把数据一次性导出 保存到桌面为json格式 我们直接用TXT打开它如下图所示 然后再使用json转EXCEL的小工具规整之后如下图 好了我们下面上代码 // UserScript // n…

算法提高-图论-单源最短路的综合应用

单源最短路的综合应用 单源最短路的综合应用AcWing 1135. 新年好AcWing 340. 通信线路AcWing 342. 道路与航线AcWing 341. 最优贸易 单源最短路的综合应用 AcWing 1135. 新年好 多次dijkstra求每个点到其它点的最短距离&#xff0c; 此时相当于建好了一张图&#xff0c;每个点…

http客户端Fegin

1.RestTemplate方式调用存在的问题 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护 2.Feign的介绍 Feign是声明式的http客户端&#xff08;只需要将发http请求的信息写出即可&#xff09; 主要基于SpringMvc的注解来声明远程调用的信息&#xff1a; 步骤&…

(十二)K8S可视化工具Rancher部署项目应用实战

1.Rancher部署springboot私有镜像 连接私有镜像操作步骤 1.进入资源>>密文 2.进入镜像库凭证列表&#xff0c;点击添加凭证 3.输入凭证名称&#xff0c;选择自定义&#xff0c;填入自己的私有镜像仓库地址&#xff0c;这里使用的是阿里云&#xff0c;输入用户名和密码…

Zoho CRM SDK

前言 因早期公司的业务在Zoho CRM&#xff0c;现在孵化出自己的想法&#xff0c;想着能把一部分CRM的数据同步导出来&#xff0c;故研究Zoho CRM SDK的接入方法。虽说在文档上都有提及&#xff0c;但有部分细节不甚明了&#xff0c;也是一遍遍尝试出来的&#xff0c;所以分享出…

【Vue】六:路由(上)使用路由 多级路由

文章目录 1.多页面应用2. 单页面应用&#xff08;使用路由&#xff09;3. 多级路由 1.多页面应用 2. 单页面应用&#xff08;使用路由&#xff09; &#xff08;1&#xff09;安装vue-router插件 vue2 要安装 vue-router3 npm i vue-router3vu3 要安装 vue-router4 npm i vue…