1、业务库痛点及解决⽅案
初期出⾏业务的订单相关,是以mysql作为业务库为基准的,但是随着业务线增多,每⽇新增数据指
数上涨,⼏乎在每天的⾼峰期期间,都会出现业务库所在服务器的cpu、IO、内存等跑满。经业务排
查发现,线上每天有定时任务都在查询业务库,从⽽导致业务库经常cpu使⽤情况是柱状⽅式 爆发式
增⻓;
⻓期下来,不但业务库处理业务超级慢,甚⾄会触发业务库崩溃。因此,需要将每⽇定时任务,从业
务库迁移出来,不在影响业务库的使⽤。于是我们选择了hbase作为定时任务的查询数仓
采⽤如下架构将数据实时同步到hbase中

2、开启mysql的binlog
Mysql的binlog⽇⽇志作⽤⽤是⽤⽤来记录mysql内部增删等对mysql数据库有更更新的内容的记录(对
数据库 的改动),对数据库的查询select或show等不不会被binlog⽇⽇志记录;主要⽤⽤于数据库的主
从复制以及增 量量恢复。
mysql的binlog⽇⽇志必须打开log-bin功能才能⽣⽣存binlog⽇⽇志
2.1:修改/etc/my.cnf
-rw-rw---- 1 mysql mysql 449229328 Sep 2 19:21 mysql-bin.000001
-rw-rw---- 1 mysql mysql 860032004 Sep 4 15:08 mysql-bin.000002
-rw-rw---- 1 mysql mysql 613773 Sep 4 15:17 mysql-bin.000003
-rw-rw---- 1 mysql mysql 125 Sep 4 15:18 mysql-bin.000004
-rw-rw---- 1 mysql mysql 645768398 Sep 24 00:40 mysql-bin.000005
-rw-rw---- 1 mysql mysql 81087585 Oct 25 14:33 mysql-bin.000006
-rw-rw---- 1 mysql mysql 192 Oct 9 18:25 mysql-bin.index
[mysqld]
log-bin=/var/lib/mysql/mysql-bin 【binlog⽇⽇志存放路路径】
binlog-format=ROW 【⽇⽇志中会记录成每⼀⼀⾏⾏⾏数据被修改的形式】
server_id=1 【指定当前机器器的服务ID(如果是集群,不不能重复)】
2.2:重启mysql,并验证
输⼊命令查看:
mysql> show variables like '%log_bin%';

进⼊指定的binlog路径查看是否⽣产binlog

cd /var/lib/mysql/

mysql> show variables like '%log_bin%';
cd /var/lib/mysql/Maxwell是⼀个能实时读取MySQL⼆进制⽇志binlog,并⽣成 JSON 格式的消息,作为⽣产者发送给
Kafka,Kinesis、RabbitMQ、Redis、Google Cloud Pub/Sub、⽂件或其它平台的应⽤程序。它的常
⻅应⽤场景有ETL、维护缓存、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、切库binlog
回滚⽅案等。官⽹(http://maxwells-daemon.io)、GitHub(https://github.com/zendesk/maxwell)
Maxwell主要提供了下列功能:
⽀持 SELECT * FROM table 的⽅式进⾏全量数据初始化 ⽀持在主库发⽣failover后,⾃动恢复binlog
位置(GTID) 可以对数据进⾏分区,解决数据倾斜问题,发送到kafka的数据⽀持database、table、
column等级别的数据分区 ⼯作⽅式是伪装为Slave,接收binlog events,然后根据schemas信息拼
装,可以接受ddl、xid、row等各种event 除了Maxwell外,⽬前常⽤的MySQL Binlog解析⼯具主要
有阿⾥的canal、mysql_streamer,三个⼯具对⽐如下:

canal 由Java开发,分为服务端和客户端,拥有众多的衍⽣应⽤,性能稳定,功能强⼤;canal 需要⾃

⼰编写客户端来消费canal解析到的数据。
maxwell相对于canal的优势是使⽤简单,它直接将数据变更输出为json字符串,不需要再编写客户端
 
3.1:解压maxwell-1.21.1.tar.gz
3.2:Maxwell解析binlog到Kafka
编写配置⽂件,主要⽤来指定解析业务库的binlog和发送数据到kafka
tar -zxvf maxwell-1.21.1.tar.gz

[root@iZ8vb395rdc93i2mnkf8tqZ maxwell-1.21.1]# vim driver.properties

[root@bigdata maxwell-1.22.1]# vim driver.properties
nlog ###############
log_level=INFO
producer=kafka
host = 192.168.121.12
user = maxwell
password = !Qaz123456
producer_ack_timeout = 600000
######### binlog ############### ######### output format stuff ###############
output_binlog_position=ture
output_server_id=true
output_thread_id=ture
output_commit_info=true
output_row_query=true
output_ddl=false
output_nulls=true
output_xoffset=true
output_schema_id=true
######### output format stuff ###############
############ kafka stuff #############
kafka.bootstrap.servers=192.168.121.12:9092,192.168.121.12:9093
kafka_topic=veche
kafka_partition_hash=murmur3
kafka_key_format=hash
kafka.compression.type=snappy
kafka.retries=5
kafka.acks=all
producer_partition_by=primary_key
############ kafka stuff #############
############## misc stuff ###########
bootstrapper=async
############## misc stuff ##########
############## filter ###############
#所有库都在采集
filter=filter=include: *.*

############## filter ###############
~

以上参数解释:http://maxwells-daemon.io/config/

######### binlog ###############
用于指定解析目标机器的binlog(业务库所在机器地址)


######### output format stuff ###############
配置输出格式


############ kafka stuff #############
指定kafka地址


############## misc stuff ###########
在处理bootstrap时,是否会阻塞正常的binlog解析  async不会阻塞


############## filter ###############
用于指定需要监控哪些库、哪些表


3.3:给maxwell添加权限
创建Maxwell⽤户,并赋予 maxwell 库的⼀些权限
CREATE USER 'maxwell'@'%' IDENTIFIED BY '!Qaz123456';
GRANT ALL ON maxwell.* TO 'maxwell'@'%';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE on *.* to
'maxwell'@'%';
flush privileges;
3.4:编写maxwell启动脚本
#! /bin/bash
nohup bin/maxwell --daemon --config driver.properties 2>&1 >>
/opt/cdh/maxwell-1.21.1/logs/maxwell.log &

3.5测试

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into test values(1,22,"小旋锋");
update test set name='whirly' where id=1;
delete from test where id=1;

在kafka消费窗口查看是否有数据:

3.6 maxwel详解

https://blog.csdn.net/wwwdc1012/article/details/88388552

mysql的binlog+maxwell+kakka的更多相关文章

  1. 20180530利用Maxwell组件实时监听Mysql的binlog日志

    转自:https://blog.csdn.net/qq_30921461/article/details/78320750 http://kafka.apache.org/quickstart htt ...

  2. maxwell实时同步mysql中binlog

    概述 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Google Cloud ...

  3. 【转】【MySQL】mysql 通过bin-log恢复数据方法详解

    mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了. 具体的操作是通过mysqlbinlog这 ...

  4. mysql开启binlog

    mysql开启binlog,至于为什么要开启binlog,可以google下. ## 设置server_id,一般设置为IP server_id= ## 复制过滤:需要备份的数据库名,多个库以逗号分隔 ...

  5. MySQL的binlog数据如何查看

    binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变. 改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕. binlog格式 ...

  6. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  7. mysql 利用binlog增量备份,还原实例

    mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 标签:binlog, mysql, mysqldump, 增量备份 一,什么是增量备份 增量 ...

  8. 不小心删除数据--利用MySQL的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...

  9. mysql通过binlog日志来恢复数据

    简介 在生产的过程中有这么一个业务场景:比如我在2016-11-19 09:30:00 通过mysqldump的方式备份了数据库,但是在2016-11-19 10:30:00的时候数据库崩溃了,如果通 ...

随机推荐

  1. DeepFM——tensorflow代码改编

    本人代码库: https://github.com/beathahahaha/tensorflow-DeepFM-master-original DeepFM原作者代码库: https://githu ...

  2. 半夜删你代码队 Day6冲刺

    一.每日站立式会议 1.站立式会议 成员 昨日完成工作 今日计划工作 遇到的困难 陈惠霖 完成注册界面 好友界面 无 侯晓龙 了解数据库使用 帮助他人建立数据库 无 周楚池 完成登录界面+管理员界面初 ...

  3. Social Infrastructure Information Systems Division, Hitachi Programming Contest 2020 C题题解

    首先,我们将题目理解成若\(i\)与\(j\)距离恰好为\(3\),则不可能\(p_i \equiv p_j \equiv 1 \space or \space 2 (\bmod 3)\).这就相当于 ...

  4. Luogu-P3205-HNOI2010-合唱队

    题目地址 思路 这道题其实是P3146 [USACO16OPEN]248的升级版,但是N的范围很大,为262144.原先的O(N3)的方法自然会TLE,甚至O(N2)的方法也不足以解决. 定义f[i] ...

  5. redis学习之——CentOS 6 下载安装redis

    一.检查当前环境: 安装过程中没有这些,命令,在CentOS 6,最小安装导致..如果执行完命令,Noting  to  do...字样说明环境正常. yum -y install rpm gcc w ...

  6. 哔哩哔哩直播录制工具v1.1.18

    软件介绍 看直播有时候非常精彩想要录制下来,或者非常喜欢某个主播想录制下直播全程,可去找录制软件的时候却发现有这样那样的问题,导致一番操作不尽人意.但是现在<B站直播录制工具>可以完美解决 ...

  7. Day1 字符串格式化

    1.占位符方式:占位符: %d 整数 %012d 数字位数至少长度为12位,不足的前面加0填充. >>> 'Hello,%s,%012d' % ('a',12345678901234 ...

  8. react第四单元(ref与DOM-findDomNode-unmountComponentAtNode)

    第四单元(ref与DOM-findDomNode-unmountComponentAtNode) #课程目标 理解react的框架使用中,真实dom存在的意义. 使用真实dom和使用虚拟dom的场景. ...

  9. GitBook简单的使用

    GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书. 使用 GitBook 管 ...

  10. 关于python面试中的设计模式,搞懂这些就足够了

    1.什么是设计模式? 设计模式是经过总结.优化,对我们经常遇到的一些编程问题的可重用的解决方案.设计模式不同于类或库可直接作用于代码.相反,它更为的高级,是一种必须在特定的情形下实现的方法模版. 2. ...