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. PyQt(Python+Qt)学习随笔:QListView的viewMode属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QListView的viewMode属性用于控制QListView的视图模式,该属性类型为枚举类型Q ...

  2. PyQt(Python+Qt)学习随笔:QTreeView的标题表头header相关属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Qt Designer中,对于树型视图QTreeView,在属性在下面有专门一栏列出了跟 ...

  3. 两种方式简单免杀ew

    1.资源操作法 使用工具: Restorator 2018 BeCyIconGrabber 首先我们从github下载ew使用360进行查杀 打开Restorator 将ew拖入,右键添加资源 选择图 ...

  4. 将一个数组转化为需要的格式,来自react官网的商品列表示例

    //原来的格式 const PRODUCTS = [ { category: 'Sporting Goods', price: '$49.99', stocked: true, name: 'Foot ...

  5. vertical-align什么时候使用?常用的值分别有什么作用?

    设置元素的垂直对齐方式 常用的值: 1.baseline:默认.元素放置在父元素的基线上. 2.sub:垂直对齐文本的下标. 3.super:垂直对齐文本的上标 4.top:把元素的顶端与行中最高元素 ...

  6. 自定义radio、checkbox的样式

    input标签中的radio和checkbox是很表单中常用的类型,大多时候,默认样式并不能满足我们的需求,所以有了此篇. 自定义样式,由此开启: html: <div class=" ...

  7. oracle 修改默认临时表空间

    --查询当前数据库默认临时表空间名 select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE'; - ...

  8. Asp.net core验证类ModelStateDictionary的bug

    在使用.net core 3.1 时发现明明没有验证请求类属性,甚至已经加了默认值 但是验证类时依然会报错 经过网上百度等搜索,尝试使用可空类型赋值默认值 果然验证类没有报错 不清楚是微软的bug还是 ...

  9. 自顶向下redis4.0(1)启动

    redis4.0的启动流程 目录 redis4.0的启动流程 简介 正文 全局server对象 初始化配置 初始化服务器 事件主循环 参考文献 简介 redis 在接收客户端连接之前,大概做了以下几件 ...

  10. [OI笔记]三种逆元的求法

    其实这篇博客只是搬运一下我之前(大概是NOIP那会)写在word里的笔记- 下面直接复制原话,题目是洛谷上求逆元的模板题:https://www.luogu.org/problemnew/show/P ...