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. spring整合mybatis01

    title: spring整合mybatis01 date: 2020-03-09 19:47:40 tags:整合的第一种方式 spring整合mybatis 1.mybatis回顾 mybatis ...

  2. XPATH基本语法

    1.XPATH与自动化之间的关系 1.XPATH是一门在XML文档中查找信息的语言.XPATH可用来在XML文档中对元素和属性进行遍历. 2.XPATH是用来选择"节点"的一种基于 ...

  3. python socket 聊天室

    socket 发送的时候,使用的是全双工的形式,不是半双工的形式.全双工就是类似于电话,可以一直通信.并且,在发送后,如果又接受数据,那么在这个接受到数据之前,整个过程是不会停止的.会进行堵塞,堵塞就 ...

  4. Mac下安装appium+python+Android sdk 环境完整流程

    安装大纲:1,安装jdk (jdk1.8及以上版本都可以,尽量不要用最新可能会不兼容) 2,安装android-sdk (mac版本的android-sdk) 3,mumu模拟器 (随便找的一个) 4 ...

  5. 二叉排序树(BST)

    二叉排序树(BST) 二叉排序树,又称二叉查找树(BST) 左子树结点值<根节点值<右子树结点值 如果用中序遍历来遍历一棵二叉排序树的话,可以得到一个递增的有序数列 左根右 二叉排序树的查 ...

  6. Map、Debug追踪

    Map集合   概述   现实生活中,我们常会看到这样一种集合:IP地址和主机名,身份证号和个人,系统用户名与系统用户对象等,这种一一对应的关系,我们把它称之为映射.Java当中提供了专门的集合类用来 ...

  7. 【Scrapy笔记】使用方法

    安装: 1.pip install wheel 安装wheel 2.安装Twisted a.访问 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted ...

  8. JavaSE25-Junit&注解

    1.Junit单元测试 1.1 测试分类 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关注程序具体的执行流程. Junit使用:白盒测试 步骤: ...

  9. collectd+infludb+grafana实现tomcat JVM监控

    前提条件:已安装好java环境,tomcat,influxdb和collectd.本文暂不提供以上内容的安装步骤 系统环境:centos7 原理:开启tomcat的jmx端口,使用collectd的c ...

  10. 【震惊】padding-top的百分比值参考对象竟是父级元素的宽度

    引言 书写页面样式与布局是前端工程师Coding 中必不可少的一项工作,在定义页面元素的样式时,padding 属性也是经常被使用到的. padding 属性用于设置元素的内边距,其值可以是lengt ...