操作系统:CentOS7

mysql版本:5.7

TiDB版本:2.0.0

同步方法:使用TiDB提供的工具集进行同步

说明:

单机mysql同步时,可以直接使用binlog同步,

但mysql集群进行同步时,则必须依靠GTID,但开启GTID后,对事物要求更高,导致以下操作会失败:

(1) 不能同时揉合多个事件;
(2) 事务内部不能创建临时表;
(3) 不能在同一事务中即更新InnoDB表,又更新MyISAM表。

  • 下载tidb的同步工具包
# 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
# sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256 # tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz
# cd tidb-enterprise-tools-latest-linux-amd64
  • mysql-binlog同步

配置mysql基本信息,添加如下配置

vi /etc/my.cnf

# server-id默认为0,不接受任何slaves。所以必须修改为0以外的数字
server-id=
# STATEMENT,ROW,MIXED三种模式。默认为MIXED,需要修改为ROW
binlog_format=ROW # 开启日志输出,并指定log文件位置与名称
log_bin=mysql-bin
log-bin-index=mysql-bin.index # 日志提交后的写入模式,提供0,,2三种选择,1是最为可靠的,也是性能最差的
# :log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
# :每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
# :每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
innodb_flush_log_at_trx_commit= # 二进制日志(binary log)同步到磁盘的频率
# 不主动同步,而依赖操作系统本身不定期把文件内容 flush 到磁盘。
# 每个语句或者事物后同步一次
# n 指定为n个语句或者事物后同步一次
sync_binlog= # 是否将同步记录记入自己的binlog,默认为0,即不记录。
# 如果本机B有从机C,当A同步binlog到B时,该选项没有开启,则A的操作只会同步到B,而不会同步到C。即B不会记录binlog,也就不会同步到C
log-slave-updates=

配置完成后重启mysql

# systemctl restart mysql
  • 导出前检查

导出前需要对表进行检查,这里以mysql的系统库做例子,实际导出数据时,应指定对应库。如果出错,则说明无法进行同步

# 检查整个mysql库
./checker -host 172.18.100.65 -L debug -user root -password root mysql # 检查mysql库下的db表
./checker -host 172.18.100.65 -L debug -user root -password root mysql db
  • 导出数据
./mydumper -h 172.20.51.68 -P  -u root -p root -B housedata -t  -F  --skip-tz-utc -o test

-h 源数据库IP

-P 源数据库端口

-u 用户名 -p 密码

-B 源数据库名

-t  导出线程数

-F 分割文件大小,单位M(推荐64)

--skip-tz-utc 不修改时间

-o 导出到文件夹名,支持绝对路径

导出后,到对应文件夹中可以看到对应的导出数据:

数据库名-schema-create.sql  库信息
数据库名.表名-schema.sql 表信息
数据库名.表名.sql 表数据
metadata 同步信息(后续做增量同步时,需要用到该文件中的信息)
  • 导入数据
./loader -h 172.18.100.66 -P  -u root  -t  -d test

-h 目标数据库IP

-P 目标数据库端口

-u 用户名

-p 密码(密码为空时,去掉该参数)

-t 导入线程数

-d 导入的文件夹,支持绝对路径

导入时会创建一个tidb_loader数据,里边会有checkpoint表,记录了每张表导入的进度

如果清理掉目标记录,再次导入时,数据将不会被再次导入,可以清理掉checkpoint后,再进行导入。

  • 启动同步

在syncer的目录下创建config.toml和syncer.mata

# vi syncer.meta 
binlog-name = "mysql-bin.000001"
binlog-pos =
# vi config.toml

log-level = "info"
server-id = #meta 文件地址
meta = "./syncer.meta" worker-count =
batch = ## pprof 调试地址, Prometheus 也可以通过该地址拉取 syncer metrics
## 将 127.0.0.1 修改为相应主机 IP 地址
status-addr = "172.20.51.68:10086" replicate-do-db = ["housedata"] [from]
host = "172.20.51.68"
user = "root"
password = "root"
port = [to]
host = "172.18.100.66"
user = "root"
password = ""
port =

启动同步程序

./syncer -config config.toml

如果同步成功了,syncer.meta文件的binlog-pos应该被自动更新的,但实际上没有,所以导致每次数据都会被重新同步一次。

这里要跟踪一下,看看是什么问题。

  • GTID同步

查看mysql版本,版本最好是5.7的,其它版本不保证能够配置成功。因为GTID在5.6版本才刚刚提供

mysql>show variables like 'version';

在binlog同步配置的基础上,再增加GTID的相关配置。

# vi /etc/my.cnf
gtid-mode = ON
enforce_gtid_consistency = ON

systemctl restart mysqld

使用./mydumper导出数据,方式与binlog方式一样。

但注意导出前需要插入一条记录,否则metadata文件中的GTID会时空的。因为刚刚启用GTID,还没有生成记录。

./mydumper -h 172.20.51.68 -P  -u root -p root -B housedata -t  -F  --skip-tz-utc -o test

导入数据与binlog方式一样

./loader -h 172.18.100.66 -P  -u root  -t  -d test

设置syncer.mate,需要从meta文件中多拷贝一个binlog-gtid过来

binlog-name = "mysql-bin.000002"
binlog-pos =
binlog-gtid = "c1d8336d-5d6d-11e8-8ad0-0050563c1c70:1-30"

启动同步,需要增加对应参数

./syncer -config config.toml --enable-gtid

同步后syncer.mate文件虽然刷新了binlog-pos,但是binlog-gtid依旧没有被刷新。

所以如果重启了,只能手工再导一次,

MYSQL5.7实时同步数据到TiDB的更多相关文章

  1. rsync简介与rsync+inotify配置实时同步数据

    rsync简介 rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. rsync特性 rsync ...

  2. 多种方式告诉你如何计算DM同步数据到TiDB的延时时间

    背景 用户在做技术选型的过程中,总是会对一些数据指标比较关心,特别是在和竞品相比较的时候,更加需要一些有说服力的数据.基于MySQL开发的项目在迁移到TiDB的时候,使用DM同步数据是必不可少的一个环 ...

  3. RedHat Linux下利用sersync进行实时同步数据

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linux5588.blog.51cto.com/65280/772054 拓扑图 ...

  4. Rsync+Inotify 搭建实时同步数据

    1.安装软件包 # yum install inotify-tools # yum -y install rsync 2.同步机器相互添加信任 [root@host-10-0-100-106 ~]# ...

  5. mysql数据实时同步到Elasticsearch

    业务需要把mysql的数据实时同步到ES,实现低延迟的检索到ES中的数据或者进行其它数据分析处理.本文给出以同步mysql binlog的方式实时同步数据到ES的思路, 实践并验证该方式的可行性,以供 ...

  6. mysql实时同步到mssql的解决方案

    数据库在应用程序中是必不可少的部分,mysql是开源的,所以很多人它,mssql是微软的,用在windows平台上是非常方便的,所以也有很多人用它.现在问题来了,如何将这两个数据库同步,即数据内容保持 ...

  7. Rsync + inotify 实现文件实时同步

    Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...

  8. (转)rsync+inotify实时同步

    原文:http://lxw66.blog.51cto.com/5547576/1331048 声明:rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端 ...

  9. 实时同步inotify+rsync

    目的,要求 nfs储存服务器与backup备份服务器,数据同步,万一nfs储存服务器挂了,数据还在 实时同步备份软件服务 1)inotify 实时同步软件 2)sersync 实时同步软件 实时同步原 ...

随机推荐

  1. JAVA概率实现--一篇最常见、最通用解决方案

    日常场景:某活动抽奖,控制各等奖的出现概率 比如控制A(中奖率):20%:B(获得优惠券率):30%:C(谢谢参与率):50% 下面以封装好在main()函数里,上代码(记得导入相应的包): publ ...

  2. 精确值避免使用float和double,使用BigDecimal

    实现将double类型的值转换为BigDecimal类型的值的不同途径以及各途径间的区别 一:有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal  ...

  3. Sql语句内功心法

    CREATE SCHEMA <模式名> AUTHORIZATION <用户名> 定义模式实际上定义了一个命名空间,在这个空间可以进一步定义该模式包含的数据库对象,例如基本表,视 ...

  4. [Java复习] 复习知识点

    将线程转换为守护线程可以通过调用Thread对象的setDaemon(true)方法来实现. String 被设计成不可变(immutable)类, 所以它的所有对象都是不可变对象. 要被序列化的实例 ...

  5. mpvue 解析

    前言 mpvue是一款使用Vue.js开发微信小程序的前端框架. 总结   生命周期的理解 文档 一次前后端实践 使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为H5和小程序提供了代码复 ...

  6. Windows10 VS2017 C++ xml解析(tinyxml2库)

    首先下载tinyxml2 7.0.1库: https://github.com/leethomason/tinyxml2/releases 打开tinyxml2,然后升级sdk,解决方案->重定 ...

  7. Ubuntu16.04 用Nomachine进行远程控制的配置

    本文介绍如何在Ubuntu16.04环境下运用Nomachine进行远程控制. 一. NoMachine介绍 NoMachine是一款基于NX技术进行远程控制的软件,最大的优势是跨平台,简单,可以实现 ...

  8. this指向问题 --无return

    this的指向在函数定义的时候是确定不了的只有在函数执行的时候才能确定this到底指向谁.this指向上一级对象 1.函数调用,this指向window var color = "red&q ...

  9. PTA寒假一

    7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...

  10. 1.1.10 word2010图片另存为存到图片库里,怎么修改之

    1. 打开一个文档,在图片上右击,图片另存为,在弹出的[保存文件]对话框中. 2.单击左上角的[组织]下拉列表"属性"按钮,在弹出的[图片 属性]对话框中,单击[包含文件夹]按钮, ...