使用DM来同步MySQL(Mariadb)到TiDB

  |   0 评论   |   0 浏览

在前文已经对DM工具做了一个 介绍 ,下面我们来使用DM工具同步数据吧。

1. 实验环境介绍

1.1 应用版本

上游数据库版本:Mariadb 10.4.6
下游数据库版本:TiDB 3.0.0
DM工具的版本:v1.0.0-rc.1-19-gf1f0f6b
所有的这些数据库及DM工具所在的系统都是CentOS7.4.

1.2 实验架构图

Mariadb和TIDB集群位于不同的网络上,为了节约资源,我在TIDB的主机上部署了DM。在生产环境下,建议单独部署DM。

实验架构图

2. 上游数据库的配置

2.1 开启binlog日志

由于DM的同步实际上是对binlog日志进行的同步,所以这里就要求在上游数据库打开binlog日志,开启binlog日志的方法请自行百度。

2.2 创建用于同步的数据库用户

使用root用户登录数据库创建用于同步的用户,并赋予权限

create user repliadmin identified by '123456';
grant select,reload,super,replication slave,replication client on *.* to 'repliadmin'@'%';
flush privileges;

##2.3 创建用于测试的数据

create database test;
use test;
create table test ( 
  id int(11) , 
  color varchar(20), 
  primary key (id)
);

3.DM工具的配置

接下来我们要配置DM-woker,让他能够连接上游数据库并获取二进制日志文件;配置DM-master,让他能对DM-worker进行管理;最后配置同步任务,配置具体需要同步的库、表和过滤规则等。

3.1 配置DM-worker

3.1.1 获取加密后的上游数据库的密码

在配置文件里面我们需要填写上游数据的密码,由于DM工具是不允许直接读取明文的密码的,所以这里使用dmctl工具来进行加密处理。

cd dm-latest-linux-amd64/
bin/dmctl -encrypt '123456'
0TrfCre5f06oUCTNbp40nkAOoFm+f6s=

3.1.2 修改DM-worker的配置文件。

DM-worker的配置文件在 conf 目录下,我们复制一份新配置文件出来,进行修改处理。

cp conf/dm-worker.toml conf/dm-worker-01.toml

然后我们编辑dm-worker-01的配置文件如下,具体的配置项说明我们会在后续讲解:

vim conf/dm-worker-01.toml

# Worker Configuration. 

#log configuration 
log-level = "info" 
log-file = "dm-worker-01.log" 

#dm-worker listen address 
worker-addr = ":8262" 

#server id of slave for binlog replication 
#each instance (master and slave) in replication group should have different server id 
server-id = 101 

#represents a MySQL/MariaDB instance or a replication group 
source-id = "mysql-replica-01" 

#flavor: mysql/mariadb 
flavor = "mariadb" 

#directory that used to store relay log 
relay-dir = "./relay_log" 

#enable gtid in relay log unit 
enable-gtid = false 

#charset of DSN of source mysql/mariadb instance 
# charset= "" 

[from] 
host = "192.168.1.174" 
user = "repliadmin" 
password = "0TrfCre5f06oUCTNbp40nkAOoFm+f6s=" 
port = 3306 

#relay log purge strategy 
#[purge] 
#interval = 3600 
#expires = 24 
#remain-space = 15 

3.1.3 启动DM-worker

bin/dm-worker --config conf/dm-worker-01.toml &

启动DM-worker后会在当前目录生成对应的日志文件以及目录文件的。

3.2 配置DM-master

3.2.1 修改DM-master的配置文件

cp conf/dm-master.toml conf/dm-master-01.toml
vim conf/dm-master.toml

DM-master的配置文件比较简单,就是把dm-worker的名称、IP和端口填入即可

rpc-timeout = "30s" 

rpc-rate-limit = 10.0 
rpc-rate-burst = 40 

log-level = "info" 
log-file = "dm-master-01.log" 

master-addr = ":8261" 

[[deploy]] 
source-id = "mysql-replica-01" 
dm-worker = "192.168.113.20:8262" 

3.2.2 启动DM-master

bin/dm-master --config conf/dm-master-01.toml &

3.3 配置同步任务

3.3.1 创建任务文件

在这里我们使用全量+增量的方式去同步数据,在配置文件里面指定 task-mode: "all"。为了简单演示,下面我们使用官网的同步任务(点我)。本次的同步任务是同步上游数据库中test库中的test表。

vim conf/task_test.yaml

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

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


# 黑白名单全局配置,各实例通过配置项名引用。 
black-white-list: 
  global: 
    do-tables:                        # 需要同步的上游表的白名单。 
    - db-name: "test"              # 需要同步的表的库名。 
      tbl-name: "test"          # 需要同步的表的名称。 

# mydumper 全局配置,各实例通过配置项名引用。 
mydumpers: 
  global: 
    mydumper-path: "./bin/mydumper"   # mydumper 二进制文件的路径。 
    extra-args: "-B test -T test"  # 只导出 `test` 库中的 `test` 表,可设置 mydumper 的任何参数。 

3.3.2 启动任务

连接DM-master

 bin/dmctl --master-addr 192.168.113.20:8261

在启动前,我们先检查下配置文件.有什么问题的话,请按照错误提示去修改

check-task ./conf/task_test.yaml

启动任务

start-task ./conf/task_test.yaml

在这里,我们的任务出错了,使用 query-status 查询任务状态发现,提示没有test.test这个表。
image.png

全量加增量的同步步骤,应该是mydump下载数据,然后loader上传数据,最后用二进制日志同步增量数据这三个步骤的。所以,我们在开启任务之前需要在下游数据库上创建对应的表才行。

在下游数据库创建对应的表

create database test; 
use test; 
create table test (  
  id int(11) ,  
  color varchar(20),  
  primary key (id) 
); 

然后我们重启任务:

stop-task test    #我们的任务名称叫做test
start-task ./conf/task_test.yaml

3.3.3 任务管理命令

这里汇总下上面用到的命令,更多命令可以输入help来查看。

#启动任务
start-task ./conf/task_test.yaml
#停止任务
stop-task test
#查询任务状态
query-status

到这里,一个简单的DM同步实验就完成了。❤️ ❤️ ❤️
后续我会介绍DM这些配置文件的具体含义以及如何用prometheus+grafana去监控DM。


标题:使用DM来同步MySQL(Mariadb)到TiDB
作者:pangcm
地址:http://pangcm.club/articles/2019/08/14/1565766930239.html