Databus for Mysql

Databus for Mysql首先准备Mysql环境,本次使用的Mysql版本是5.7root/Welcome_1:33061.配置mysqlmysql需要配置的有三点:开启binlog,设置binlog格式为ROW(mysql5.7版本默认格式就是ROW,所以这里我没有更改)禁用binlog_checksum开启binlog的方法:vim/etc/my.cnf##添加如下内容:server-id…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

首先准备Mysql环境,本次使用的Mysql版本是5.7 root/Welcome_1:3306

1.配置mysql

mysql需要配置的有三点:

  • 开启binlog,
  • 设置binlog格式为ROW(mysql5.7版本默认格式就是ROW,所以这里我没有更改)
  • 禁用binlog_checksum

开启binlog的方法:

vim /etc/my.cnf 
## 添加如下内容:
server-id=1
log-bin=/var/lib/mysql/mysql-bin
## 添加好后重启
systemctl restart mysqld.service;
mysql -uroot -pWelcome_1
mysql>show variables like 'log_bin%';
mysql> show variables like 'binlog_format';

看到binlog已经开启,并且binlog的格式是ROW。
在这里插入图片描述

禁用binlog_checksum的方法:

mysql> show global variables like 'binlog_checksum';
# 结果是CRC32
set global binlog_checksum=none;
# 再次查询
show global variables like 'binlog_checksum';
# 结果是NONE 禁用成功

2. 准备测试数据库

编译databus

# 首先打开这个文件PersonClientMain.java
vim databus2-example/databus2-example-client/src/main/java/com/linkedin/databus/client/example/PersonClientMain.java
# 将26行改为:
static final String PERSON_SOURCE = "com.linkedin.events.example.or_test.Person";
# 不更改的话默认是读取Oracle示例的,否则后面运行cliet会无法捕获数据变更。
# 更改完毕即可编译:
 gradle -Dopen_source=true assemble
# 运测试环境脚本
$ cd build/databus2-example-relay-pkg/distributions
$ tar -zxvf databus2-example-relay-pkg.tar.gz
 vim bin/create_person.sh
# 将第4行端口号改为3306(默认是33066)
MYSQL='/usr/bin/mysql --protocol=tcp --port=3306'
# 配置mysql本地免密码登录:
 vim ~/.my.cnf
# 输入如下内容
[client]
host='localhost'
user='root'
password='Welcome_1'
# 运行测试环境脚本:
$ cd bin && ./create_person.sh

运行结果如下:
在这里插入图片描述
ERROR 1133 (42000) at line 1: Can’t find any matching row in the user table这个错误是因为这个脚本造成的:

${MYSQL} -uroot -e "GRANT ALL ON *.* TO 'or_test'@'127.0.0.1';"

忽略即可,本来就没有创建127.0.0.1相关的用户,不影响后续。

3.运行relay

首先更改build/databus2-example-relay-pkg/distributions/conf/sources-or-person.json
将其中的参数改为我们要使用的测试环境参数,目前已知端口3306,再查询一下server_id。

mysql> show variables like '%server_id%';//我这里查询到的是1,
# 最终更改结果如下:
{ 
   
    "name" : "person",
    "id"  : 1,
    "uri" : "mysql://or_test%2For_test@localhost:3306/1/mysql-bin",
    "slowSourceQueryThreshold" : 2000,
    "sources" :
    [
        { 
   
        "id" : 40,
        "name" : "com.linkedin.events.example.or_test.Person",
        "uri": "or_test.person",
        "partitionFunction" : "constant:1"
         }
    ]
}

运行relay:

 sh bin/start-example-relay.sh or_person -Y ./conf/sources-or-person.json
# 测试relay:
 curl -s http://localhost:11115/sources
 [{ 
   "name":"com.linkedin.events.example.or_test.Person","id":40}] //得到这个结果代表运行成功。
# 更新一下person表
mysql> update person set first_name='John' where id=1;
#测试relay是否捕获了数据更新事件:
 curl -s http://localhost:11115/containerStats/inbound/events/total?pretty | grep -m1 numDataEvents
"numDataEvents" : 1,//得到这个结果证明已经捕获成功

4.运行Client

cd到example-client文件夹build/databus2-example-client-pkg/distributions

#运行client
 sh bin/start-example-client.sh person
#监控一下client.log日志:
 tail -f logs/client.log
#向person表汇总插入一条数据再删除。
insert into person values(25,'ket','john',sysdate(),false);
delete from person where id=25;

会发现client.log中将两个事件都捕获到了。
在这里插入图片描述
至此,databus for mysql的例子测试完毕。
不过官方文档也指出了目前的软件完成程度Databus-for-MySQL
Future Work

  1. Automatic Avro schema file generation for a given MySQL table
  2. Support for consistent change-capture in a clustered MySQL environment with mastership transfers
  3. Support for global TXID in MySQL-5.6
  4. Multi-tenancy optimizations (w.r.t. number of fetches of binlog files from master and server-side filtering)
  5. Composite keys

目前or_test.person的avro序列化文件是已经生成好的,可以直接使用,但是avro序列化文件生成目前只支持Oracle,官方还没有支持Mysql。

小结:

最近两篇写了databus针对mysql以及Oracle的示例,网络上搜索相关资料比较少,介绍这个工具的文章都说这个工具功能比较完善而且性能好。不过通过这两个例子我发现这个工具相比OGG这种成熟的商用软件,还是显得简陋了。OGG可以通过配置源端和目标端完成数据同步。而databus只完成了数据捕获,如果要实现数据捕获以后同步到目标库,还要自己写程序实现。开发以及学习成本较高。所以我觉得对于多数公司应该不适用。

参考文章:

  1. databus/wiki
  2. inkedin 的 databus 部署
  3. databus bootstrap 部署
  4. Databus架构分析与初步实践(for mysql)(上篇)
  5. Databus架构分析与初步实践(for mysql)(下篇)
  6. Databus部分翻译
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181342.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux系统的内核态和用户态[通俗易懂]

    Linux系统的内核态和用户态[通俗易懂]一、 Unix/Linux的体系架构  如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括CPU资源、存储资源、I/O资源等。为了使上层应用能够访问到这些资源,内核必须为上层应用提供

    2022年9月17日
    0
  • 手把手教你搭建个人博客!

    作者:dimsky链接:https://www.jianshu.com/p/4eaddcbe4d12 三步完成免费个人博客搭建, 这是一篇小白也能看懂的文章,本文主要针对mac O…

    2021年6月22日
    123
  • 学生成绩管理系统(C语言版)「建议收藏」

    学生成绩管理系统(C语言版)「建议收藏」大一上学期实训项目总结(学生成绩管理系统)大一刚接触这个计算机专业的相关知识,就觉得这个专业很有趣。最先接触的编程语言就是C语言,想必大多数人都是如此吧。我们这个学期末,也就是期末考试结束后,开始这个实训。我也是第一次听说实训这个东西,当然可能这个实训也主要针对我们计算机专业的学生。我们这次实训历时5天,是由公司请来的专业人员给我们进行指导的。前面几天时进行C语言基础知识的复习与巩固,后面两天就是给每个组时间,进行实训项目的制作。我们组选择的是学生成绩管理系统,这个也是比较常见的项目,有些组选择的是贪吃

    2022年6月20日
    23
  • 基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法

    基于粒子群优化算法的函数寻优算法研究_matlab粒子群优化算法一、理论基础粒子群算法(particleswarmoptimization,PSO)是计算智能领域一种群体智能的优化算法。该算法最早由Kennedy和Eberhart在1995年提出的。PSO算法源于对鸟类捕食行为的研究,鸟类捕食时,找到食物最简单有效的策略就是搜寻当前距离食物最近的鸟的周围区域。PSO算法就是从这种生物种群行为特征中得到启发并用于求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子

    2022年10月11日
    0
  • IDEA设置自动导入包方法「建议收藏」

    作为程序员,有的时候多做一步就觉得累,所以本人就给IDEA设置了自动导入包,也算是提高了些效率吧。手动导入快捷键(Alt+Enter)1》》》》打开file——setting2》》》》打开General——Autoimport:将下列两项勾选中。…

    2022年4月10日
    353
  • 评论一下现有几个开源IM框架(Msn/QQ/Fetion/Gtalk…)[通俗易懂]

    评论一下现有几个开源IM框架(Msn/QQ/Fetion/Gtalk…)[通俗易懂]转载:http://www.cnblogs.com/zc22/archive/2010/05/30/1747300.html前言—————-这阵子,在集成通讯框架,由于不想

    2022年8月5日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号