TiDB数据库 使用syncer工具同步实时数据

Easter79
• 阅读 513
mysql> select campaign_id ,count(id) from creative_output group by campaign_id;
602843 rows in set (4 min 44.23 sec)

mysql> select is_cr_own ,count(id) from creative_output group by is_cr_own;
597684 rows in set (44.55 sec)

首先是查看tidb数据库的syncer工具的介绍

使用syncer工具的场景一般是:

  全量导入历史数据后,通过增量的方式同步新的数据 (需要 checker + mydumper + loader + syncer)。该场景需要提前开启 binlog 且格式必须为 ROW。

主要的步骤我们可以看官网链接:

https://pingcap.com/docs-cn/op-guide/migration-overview/

注意:mysql必须开启几项服务才行,主要是bin-log功能,Binlog格式等等,详细请查看:https://pingcap.com/docs-cn/tools/syncer/  的后半部分内容。

有一个文件syncer.mata需要注意:

TiDB数据库   使用syncer工具同步实时数据

我创建并编辑好这个文件后放在了/usr/local/tidb-tools目录下面,这个文件的目录需要在config.toml的内容中指定一下。但是我的重点是要说上面这个图片中的“binlog-gtid”这一行的内容。因为我本次实验没有用到主从环境,所以暂时不考虑binlog-gtid的问题,下面列一下我的文件内容

TiDB数据库   使用syncer工具同步实时数据

我只写了这两行数据,不过虽然没有用到binlog-gtid的功能,也应该指定出来,把binlog-pos设置为空就可以了,例如:binlog-pos=""

然后我们最好使用配置文件config.toml来启动syncer。config.toml文件可以放在任一位置,在启动syncer时提供文件即可:例如

TiDB数据库   使用syncer工具同步实时数据

其实位置是小问题,只是我在看文章的时候纠结z这个位置是在哪里呢,后来才知道是小问题。

还有几个报错的,我们需要注意一下:

1、报错:就是启动syncer的时候直接报错

TiDB数据库   使用syncer工具同步实时数据

居然不能连接mysql这肯定是配置文件的原因,查看一下来:

log-level = "info"

server-id = 101

## meta 文件地址
meta = "/usr/local/tidb-tools/syncer.meta"

worker-count = 16
batch = 10

## pprof 调试地址, Prometheus 也可以通过该地址拉取 syncer metrics
## 将 127.0.0.1 修改为相应主机 IP 地址
status-addr = "172.31.30.62:10086"

## 跳过 DDL 或者其他语句,格式为 **前缀完全匹配**,如: `DROP TABLE ABC`,则至少需要填入`DROP TABLE`.
# skip-sqls = ["ALTER USER", "CREATE USER"]

## 在使用 route-rules 功能后,
## replicate-do-db & replicate-ignore-db 匹配合表之后(target-schema & target-table )数值
## 优先级关系: replicate-do-db --> replicate-do-table --> replicate-ignore-db --> replicate-ignore-table
## 指定要同步数据库名;支持正则匹配,表达式语句必须以 `~` 开始
#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 = "172.31.30.62"                                #是这一步出错了       
user = "root"
password = "123456"
port = 3306

[to]
host = "172.31.30.62"
user = "root"
password = ""
port = 4000

不知道大概什么问题,虽然我的mysql和tidb主节点在一个机器上面,但是连接的时候指定不同的端口就可以了,可是在这里就是行不通,我猜应该是hosts文件映射的问题吧,但是我没有修改hosts文件,只是把上面的黄色区域的内容修改了为:“127.0.0.1”就成功了,我们看一下成功的例子:

TiDB数据库   使用syncer工具同步实时数据

然后你在mysql中插入数据,syncer会实时写入tidb数据库中。

即便把syncer关掉之后,这个时候虽然不会同步,但是一启动进程就会立即同步mysql中之前未同步到tidb中的数据。

下面这是syncer的同步进程,在config.toml指定的

TiDB数据库   使用syncer工具同步实时数据

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k