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. 直接插入排序(python实现)

    这篇博文用来介绍直接插入排序 直接插入排序基本思想: 每次将一个待排序的记录插入到已经排好序的数据区中,直到全部插入完为止 直接插入排序算法思路: 在直接插入排序中,数据元素分为了有序区和无序区两个部 ...

  2. KM 算法

    KM 算法 可能需要先去学学匈牙利算法等二分图相关知识. 模板题-洛谷P6577 [模板]二分图最大权完美匹配 给 \(n\) 和 \(m\) 与边 \(u_i,v_i,w_i(1\le i\le m ...

  3. Java集合源码分析(四)——Vector

    简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...

  4. uniapp中使用picker中的注意事项

    APP端中picker点击后不弹出: 1.请确保picker标签里面嵌套了一个view,并且view里面有值 2.请确保picker中的默认值的格式跟该picker类型的值对应 例如下面: <v ...

  5. php_memcache扩展

    今天在一家招聘信息看到需要熟悉memcache,以前没接触过,用的都是redis,今天稍微看了下,在这里记述下一些基础点. memcache是什么? 首先我们需要了解memcache是做什么的,他有什 ...

  6. sqli-labs lexx25-28a(各种过滤)

    less-25AND OR 过滤 less-25a基于Bool_GET_过滤AND/OR_数字型_盲注 less-26过滤了注释和空格的注入 less-26a过滤了空格和注释的盲注 less-27过滤 ...

  7. 庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署

    庐山真面目之八微服务架构 NetCore 基于 Dockerfile 文件部署 一.简介      从今天开始,不出意外的话,以后所写的文章中所介绍项目的部署环境都应该会迁移到Linux环境上,而且是 ...

  8. 多任务-python实现-迭代器相关(2.1.12)

    @ 目录 1.需求 2.斐波那契数列演示 3.并不是只有for循环能接收可迭代数据类型,list,tuple也可以 1.需求 类比 早上起来吃包子 1.买1年的包子,放在冰箱,每天拿一个 2.每天下楼 ...

  9. ecshop v2 v3 EXP

    import requests import binascii def get_v2Payload(code): '''Ecshop V2.x payload''' code = "{$ab ...

  10. sqli-labs第5关布尔盲注pyhton脚本

    import requests import os #此函数先判断数据库长度 def length(url,str): num = 1 while True: str_num = '%d' %num ...