MySQL 同一实例不一样库之间表同步(Otter 应用)

1 需求

  • 在同一台服务器同一MySQL实例中的source库和target库都存在student表。若是source库中该表发生增删改操做时,也须要体现到target库的student表中;

1222878-20190105212337031-1206895286.jpg

2 解决方案

2.1 方案一:使用Shell脚本实现

2.2 方案二:DataX

  • 官方介绍:
    • DataX 是阿里巴巴集团内被普遍使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各类异构数据源之间高效的数据同步功能。
  • 没有采纳此方案的缘由:
    • DataX 自己占用空间太大,771M;
    • DataX 中使用到了Python,这门语言本身暂时也是只知其一;不知其二;
    • DataX 适用于不一样数据源的数据同步,而这个需求中的数据源均为MySQL,故放弃此方案;

2.3 方案三: Otter 增量同步

  • 官方介绍:
    • 纯Java开发;
    • 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统;

2.3.1 工做原理(摘自官网):

1222878-20190105212031600-690439226.jpg

原理描述:
html

  1. 基于Canal开源产品,获取数据库增量日志数据;
  2. 典型管理系统架构,manager(web管理)+node(工做节点)
    a. manager运行时推送同步配置到node节点;
    b. node 节点将同步状态反馈到manager上;
  3. 基于zookeeper,解决分布式状态调度,容许多node节点之间协同工做;

2.3.2 环境准备

2.3.3 环境搭建及参数配置

3. Otter搭建过程当中遇到的问题总结

3.1 MySQL 开启binlog

  • Windows 系统:
    • my.ini中添加以下语句,注意my.ini保存时,编码为:GB2312
# Binary Logging
log-bin=mysql-bin
binlog-format=ROW

#Server ID 不能重复
#注意:在 MySQL 5.7.3 及之后版本,若是没有设置server-id, 那么设置binlog后没法开启MySQL服务.
server-id=201609
  • Linux系统:
    • 查看是否有设置使用指定目录的my.cnf文件:ps aux|grep mysql|grep 'my.cnf';若是没有输出,表示没有设置;
    • 查看mysql默认读取my.cnf的目录:mysql --help|grep 'my.cnf';
# Binary Logging
log-bin=/var/lib/mysql/mysql-bin    # 此处为绝对路径
binlog-format=ROW

#Server ID 不能重复
#注意:在 MySQL 5.7.3 及之后版本,若是没有设置server-id, 那么设置binlog后没法开启MySQL服务.
server-id=201609
  • 查看是否设置成功:
    • 经过MySQL客户端:SHOW MASTER STATUS,若是设置成功,会有以下输出:

1222878-20190105212049496-1484271986.jpg

3.2 初始化Otter系统表

1222878-20190105212104947-1733440122.jpg

3.3 manager数据表配置说明:

1222878-20190105212120231-246523470.png


参考资料:node

转载于:https://www.cnblogs.com/linkworld/p/10226327.htmlmysql