Docker 单机部署 DM 挂载

概述

在本文中,我们将学习如何使用 Docker 单机部署 DM(Data Migration,数据迁移)并挂载数据。DM 是一个开源的数据迁移工具,由阿里巴巴公司开发,用于实现数据库的增量迁移和全量迁移。

准备工作

在开始之前,请确保已经安装了 Docker 和 Docker Compose,并且具备一定的 Docker 使用经验。

流程概览

下表列出了部署 DM 并挂载数据的主要步骤:

步骤 描述
1. 创建 Docker 网络 创建一个用于 DM 部署的 Docker 网络
2. 拉取 DM 镜像 从 Docker Hub 上拉取 DM 镜像
3. 创建 DM 配置文件 创建 DM 配置文件用于配置迁移任务
4. 启动 DM Master 启动 DM Master 服务
5. 启动 DM Worker 启动 DM Worker 服务
6. 创建数据目录 创建用于挂载数据的目录
7. 启动 DM 数据源 启动 DM 数据源实例
8. 检查任务状态 检查 DM 任务的状态
9. 监控 DM 迁移进度 监控 DM 数据迁移的进度

详细步骤及代码示例

下面将详细介绍每个步骤所需要执行的操作以及相应的代码示例。

步骤 1: 创建 Docker 网络

首先,我们需要创建一个 Docker 网络,用于 DM 的部署。可以使用以下命令来创建一个名为 dm-network 的网络:

docker network create dm-network

步骤 2: 拉取 DM 镜像

接下来,我们需要从 Docker Hub 上拉取 DM 镜像。可以使用以下命令来拉取最新版本的 DM 镜像:

docker pull pingcap/dm

步骤 3: 创建 DM 配置文件

在部署 DM 前,需要创建一个 DM 配置文件,用于配置迁移任务。可以按照以下示例内容创建一个名为 dm-config.yml 的文件:

name: "example-task"
task-mode: "all"
clean-dump-file: true
online-ddl-scheme: "gh-ost"
meta-dir: "./dm_meta"
case-sensitive: false
timezone: "Asia/Shanghai"

mysql-instances:
  - source-id: "mysql-replica-01"
    black-white-list: "global"
    mydumper-config-name: "global"
    loader-config-name: "global"
    syncer-config-name: "global"
    block-allow-list: "global"
    block-ignore-list: "global"
    mydumper-thread: 4
    syncer-thread: 32
    route-rules: ["route-rule-1"]

worker-1:
  deploy-dir: "./dm_worker_1"
  log-level: "info"
  server-id: 101
  worker-addr: "worker-1:8262"

worker-2:
  deploy-dir: "./dm_worker_2"
  log-level: "info"
  server-id: 102
  worker-addr: "worker-2:8262"

route-rules:
  - name: "route-rule-1"
    pattern: "shard:*"
    target-schema: "dm_test"
    target-table: "shard_*"
    target-ddl: "dm_test"
    custom-schema: "dm_test"
    custom-table: "shard_custom_*"

block-allow-list:
  global:
    do-dbs:
      - "dm_test"
      - "dm_block_allow_list"

block-ignore-list:
  global:
    do-dbs:
      - "dm_test"
      - "dm_block_ignore_list"

步骤 4: 启动 DM Master

在启动 DM Master 之前,我们需要创建一个用于挂载配置文件的目录。可以使用以下命令来创建名为 dm-master 的目录:

mkdir dm-master

接下来,使用以下命令启动 DM Master 服务:

docker run -d \
  --name dm-master \
  --net dm-network \
  -v $(pwd)/dm-master:/etc/dm-master \
  pingcap/dm