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. Nmap学习使用指南

    本博客严重参考 Nmap使用指南1.0: https://github.com/scanfsec/penetration/blob/master/Nmap%E4%BD%BF%E7%94%A8%E6%8 ...

  2. Springboot集成swagger和knife

    前言 knife4j是在swagger的基本上做做了一次封装,主要体现在ui表现,所有在使用前必须先搭建好swagger2,其实是swagger和knife都可以访问, 至于哪个好用全看个人! swa ...

  3. Codeforces Round #685(Div2)

    Contest Link Official Editorial A. Subtract or Divide 给你一个数 \(n\) ,每一步可以做以下两个操作之一: 用一个不等于 \(n\) 的 \( ...

  4. CF500G / T148321 走廊巡逻

    题目链接 这题是 Codeforces Goodbye 2014 的最后一题 CF500G,只是去掉了 \(u \not= x, v \not = v\) 的条件. 官方题解感觉有很多东西说的迷迷瞪瞪 ...

  5. Java集合源码分析(一)——集合框架

    集合框架 集合框架如图所示 Java集合是Java提供的工具包,主要包括常用的数据结构,包括:集合.链表.队列.栈.数组.映射等. 集合的工具包位置是java.util.* 集合主要可以分为五类: L ...

  6. 谷歌SameSite策略

    当我新下载谷歌80.x版本的时候,访问一个系统(内嵌跳转到其他系统的iframe),跳转过去没有携带cookie,以前版本的谷歌浏览器是可以的,控制台提示SameSite策略,给阻止了cookie携带 ...

  7. MySQL事务提交流程

    有binlog的CR方式(重点核心!!): 有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog写成功后,会将bi ...

  8. 恕我直言,你可能连 GitHub 搜索都不会用 - 如何精准搜索的神仙技巧

    大家好,我是你们的 前端章鱼猫,一个不喜欢喵.又不喜欢吃鱼的超级猫 ~ 今天给大家带来的是 在 GitHub 上如何精准搜索的神仙技巧. [前端GitHub:https://github.com/bi ...

  9. elementUI的动态tabs页的使用,vue的动态组件的操作

    elementUI的动态tabs页的使用,vue的动态组件的操作 有时候我们需要用到动态的tab页,结合不同的页面内容来显示.这里是使用了elementUI的动态tabs页来实现的 <div c ...

  10. Spark-3-调优要点

    1 内存调整要点 Memory Tuning,Java对象会占用原始数据2~5倍甚至更多的空间.最好的检测对象内存消耗的办法就是创建RDD,然后放到cache里面去,然后在UI上面看storage的变 ...