Syncer使用(MySQL向TiDB[MySQL]同步数据)

本文档主要从https://www.pingcap.com/docs-cn/tools/syncer/整理。

一、Syncer 简介

Syncer 是一个数据导入工具,能方便地将 MySQL 的数据增量导入到 TiDB。

二、Syncer 架构

Syncer 架构

三、部署Syncer

下载 TiDB 企业版工具集 (Linux)。Syncer可以部署在任一台可以连通对应MySQL和TiDB集群的机器上,推荐部署在TiDB集群。

下载 tool 压缩包和压缩包的sha256码(用于检测文件完整性)

wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz

wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256

成功 时如下图:

下载成功时输出

检查文件完整性,返回 OK 则正确

sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256

返回OK时输出:

检查文件完整性

解开压缩包

tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz

四、Syncer同步前检查

4.1源库 server-id 检查

可通过以下命令查看 server-id,结果为空或者为 0,Syncer 无法同步数据

Syncer server-id 与 MySQL server-id 不能相同,且在 MySQL cluster 中唯一

show global variables like 'server_id';

我的MySQL输出如下:

源库 server-id

4.2检查 Binlog 相关参数

检查 MySQL 是否开启 binlog

可以用如下命令确认是否开启了 binlog

如果结果是 log_bin = OFF,需要开启。开启方式请参考 官方文档

show global variables like 'log_bin';

我的MySQL输出如下:

这个一般都会开启的

4.3检查 MySQL binlog 格式是否为 ROW

可以用如下命令检查 binlog 格式:

show global variables like 'binlog_format';

我的MySQL输出如下:

 binlog 格式

如果发现 binlog 格式是其他格式,可以通过如下命令设置为 ROW(未测试):

如果 MySQL 有连接,建议重启 MySQL 服务或者杀掉所有连接。

set global binlog_format=ROW;

flush logs;

4.4检查 MySQL binlog_row_image 是否为 FULL

可以用如下命令检查 binlog_row_image

show global variables like 'binlog_row_image';

我的MySQL输出如下:

binlog_row_image 是否为 FULL

如果 binlog_row_image 结果不为 FULL,请设置为 FULL。设置方式如下(未测试):

set global binlog_row_image = FULL;

4.5检查 mydumper 用户权限

mydumper 导出数据至少拥有以下权限: select, reload

mydumper 操作对象为 RDS 时,可以添加 --no-locks 参数,避免申请 reload 权限

4.6检查上下游同步用户权限

需要上游 MySQL 同步账号至少赋予以下权限:select , replication slave , replication client

下游 TiDB 可暂时采用 root 同权限账号

4.7检查 GTID 与 POS 相关信息

查看所有binlog日志

show binary logs;

我的MySQL输出如下:

所有binlog日志

使用以下语句查看 binlog 内容:

show binlog events in 'mysql-bin.000037' from 0 limit 10;

五、Syncer同步 

在解压的tidb-enterprise-tools-latest-linux-amd64目录中看到只有bin目录,这里我们新建conf目录

mkdir conf

5.1准备配置文件syncer.meta

创建syncer.meta文件,存放binlog position

vi syncer.meta

在文件中加入同步开始的binlog名称及postion:

binlog-name = "mysql-bin.000037"

binlog-pos = 0

ps:syncer.meta 只需要第一次使用的时候配置,后续 Syncer 同步新的 binlog 之后会自动将其更新到最新的 position。

5.1准备配置文件config.toml

vi config.toml

在文件中加入如下内容:

log-level = "info"

server-id = 20113306

## meta 文件地址

meta = "./syncer.meta"

worker-count = 16

batch = 10

## pprof 调试地址, Prometheus 也可以通过该地址拉取 syncer metrics

## 将 127.0.0.1 修改为相应主机 IP 地址

status-addr = "127.0.0.1:10086"

# 注意: skip-sqls 已经废弃, 请使用 skip-ddls.

# skip-ddls 可以跳过与 TiDB 不兼容的 DDL 语句,支持正则语法。

# skip-ddls = ["^CREATE\\s+USER"]

# 注意: skip-events 已经废弃, 请使用 skip-dmls

# skip-dmls 用于跳过 DML 语句. type 字段取值为 'insert', 'update', 'delete'。

# 下面的例子为跳过 foo.bar 表的所有 delete 语句。

# [[skip-dmls]]

# db-name = "foo"

# tbl-name = "bar"

# type = "delete"

#

# 下面的例子为跳过所有表的 delete 语句。

# [[skip-dmls]]

# type = "delete"

#

# 下面的例子为跳过 foo 库中所有表的 delete 语句。

# [[skip-dmls]]

# db-name = "foo"

# type = "delete"

## 指定要同步数据库名;支持正则匹配,表达式语句必须以 `~` 开始

#replicate-do-db = ["~^b.*","s1"]

## 指定要同步的 db.table 表

## db-name 与 tbl-name 不支持 `db-name ="dbname,dbname2"` 格式

#[[replicate-do-table]]

#db-name ="dbname"

#tbl-name = "table-name"

#[[replicate-do-table]]

#db-name ="dbname1"

#tbl-name = "table-name1"

## 指定要同步的 db.table 表;支持正则匹配,表达式语句必须以 `~` 开始

#[[replicate-do-table]]

#db-name ="test"

#tbl-name = "~^a.*"

## 指定**忽略**同步数据库;支持正则匹配,表达式语句必须以 `~` 开始

#replicate-ignore-db = ["~^b.*","s1"]

## 指定**忽略**同步数据库

## db-name & tbl-name 不支持 `db-name ="dbname,dbname2"` 语句格式

#[[replicate-ignore-table]]

#db-name = "your_db"

#tbl-name = "your_table"

## 指定要**忽略**同步数据库名;支持正则匹配,表达式语句必须以 `~` 开始

#[[replicate-ignore-table]]

#db-name ="test"

#tbl-name = "~^a.*"

# sharding 同步规则,采用 wildcharacter

# 1. 星号字符 (*) 可以匹配零个或者多个字符,

#    例子, doc* 匹配 doc 和 document, 但是和 dodo 不匹配;

#    星号只能放在 pattern 结尾,并且一个 pattern 中只能有一个

# 2. 问号字符 (?) 匹配任一一个字符

#[[route-rules]]

#pattern-schema = "route_*"

#pattern-table = "abc_*"

#target-schema = "route"

#target-table = "abc"

#[[route-rules]]

#pattern-schema = "route_*"

#pattern-table = "xyz_*"

#target-schema = "route"

#target-table = "xyz"

[from]

host = "127.0.0.1"

user = "root"

password = ""

port = 3306

[to]

host = "127.0.0.1"

user = "root"

password = ""

port = 4000

其中server-id就是源数据库的server-id(20113306)

















©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,110评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,443评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,474评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,881评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,902评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,698评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,418评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,332评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,796评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,968评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,110评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,792评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,455评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,003评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,130评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,348评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,047评论 2 355

推荐阅读更多精彩内容