如何使用Maxwell实时同步mysql数据


Posted in MySQL onApril 08, 2021

Maxwell简介

maxwell是由java编写的守护进程,可以实时读取mysql binlog并将行更新以JSON格式写入kafka、rabbitMq、redis等中,  这样有了mysql增量数据流,使用场景就很多了,比如:实时同步数据到缓存,同步数据到ElasticSearch,数据迁移等等。

maxwell官网:http://maxwells-daemon.io
 maxwell源代码:https://github.com/zendesk/maxwell

Maxwell的配置与使用

maxwell 依赖java sdk,所以需要先配置JDK环境。

1.下载Maxwell安装包

root@xxx maxwell]# pwd
/usr/local/maxwell
[root@xxx maxwell]# wget https://github.com/zendesk/maxwell/releases/download/v1.19.5/maxwell-1.19.5.tar.gz
[root@xxx maxwell]# tar zxvf maxwell-1.19.5.tar.gz 
[root@xxx maxwell]# cd maxwell-1.19.5

2.配置mysql,打开mysql binlog日志

[root@xxx mysql]# vi /usr/local/mysql/my.cnf 

[mysqld]
log-bin=mysql-bin #添加这一行就
binlog-format=ROW #选择row模式
server_id=1 #随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了

重启mysql服务,登陆mysql,查看binlog日志模式

mysql> show variables like '%log_bin%'
+---------------------------------+-------------------------------+
| Variable_name                   | Value                         |
+---------------------------------+-------------------------------+
| log_bin                         | ON                            |
| log_bin_basename                | /data/mysqldb/mysql-bin       |
| log_bin_index                   | /data/mysqldb/mysql-bin.index |
| log_bin_trust_function_creators | OFF                           |
| log_bin_use_v1_row_events       | OFF                           |
| sql_log_bin                     | ON                            |
+---------------------------------+-------------------------------+
6 rows in set (0.11 sec)

Maxwell需要在schema_database选项指定的数据库中存储状态的权限(默认库名称为maxwell),所以需要提前给权限:

#创建一个有同步数据的用户yhrepl
mysql> create user 'yhrepl'@'*' identified by 'scgaopan'; 
Query OK, 0 rows affected (0.10 sec)

#此用户yhrepl要有对需要同步的数据库表有操作权限
mysql> grant all privileges on test.* to 'yhrepl'@'%' identified by 'scgaopan'; 
Query OK, 0 rows affected (0.13 sec)

#给yhrepl有同步数据的权限
mysql> grant select,replication client,replication slave on *.* to 'yhrepl'@'%' identified by 'scgaopan';
Query OK, 0 rows affected (0.10 sec)
# Maxwell需要在schema_database选项指定的数据库中存储状态的权限(默认库名称为maxwell)
mysql> grant all privileges on maxwell.* to 'yhrepl'@'%' identified by 'scgaopan';
Query OK, 0 rows affected (0.09 sec)

3.启动Maxwell,主要介绍数据写入rabbitmq的实战:

[root@xxx maxwell-1.19.5]# vi /usr/local/maxwell/maxwell-1.19.5/config.properties
#日志级别
log_level=DEBUG

producer=rabbitmq
daemon=true

#监控的数据库, mysql用户必须拥有读取binlog权限和新建库表的权限
host=47.105.110.xxx
user=yhrepl
password=scgaopan

output_nulls=true
jdbc_options=autoReconnet=true

#监控数据库中的哪些表
filter=exclude: *.*,include: test.AA

#replica_server_id 和 client_id 唯一标示,用于集群部署
replica_server_id=64
client_id=test-id

#metrics_type=http
#metrics_slf4j_interval=60
#http_port=8111
#http_diagnostic=true # default false

#rabbitmq
rabbitmq_host=47.105.110.xxx
rabbitmq_port=5672
rabbitmq_user=guest
rabbitmq_pass=guest
rabbitmq_virtual_host=/
rabbitmq_exchange=maxwell
rabbitmq_exchange_type=topic
rabbitmq_exchange_durable=false
rabbitmq_exchange_autodelete=false
rabbitmq_routing_key_template=%db%.%table%
rabbitmq_message_persistent=false
rabbitmq_declare_exchange=true

启动Maxwell:

[root@xxx maxwell-1.19.5]# ./bin/maxwell
#可以后台启动
[root@xxx maxwell-1.19.5]# nohub ./bin/maxwell &

启动成功,此时会自动生成maxwell库,该库记录了maxwell同步的状态,最后一次同步的id等等信息,在主库失败或同步异常后,只要maxwell库存在,下次同步会根据最后一次同步的id。如果没有生成maxwell库或报错,可能config.properties中配置的mysql用户权限不够

rabbitmq的操作

rabbitmq的操作,启动maxwell后就有一个maxwell的exchage生成

如何使用Maxwell实时同步mysql数据

但对应的queue和exchange和queue的绑定需要用户自己去实现

新建一个maxwell-test的queue:

如何使用Maxwell实时同步mysql数据

把queue与exchange进行绑定:

如何使用Maxwell实时同步mysql数据

注意,这里的Routing key 是区分大小写的

在数据库中修改一条记录,可以看到maxwell-test队列里面有一第记录了。

如何使用Maxwell实时同步mysql数据

全量同步

使用maxwell-bootstrap命令

./bin/maxwell-bootstrap --database xhd --table xhd-sso --host 127.0.0.1 --user xiehd --password xiehd2018 --client_id maxwell_dev

同步xhd.xhd-sso表的所有数据,并指定client_id示maxwell_dev的maxwell执行同步

上一个命令先开着,然后再启动client_id=maxwell_dev的maxwell

./bin/maxwell --client_id maxwell_dev

等待执行完成即可

以上就是如何使用Maxwell实时同步mysql数据的详细内容,更多关于用Maxwell同步mysql数据的资料请关注三水点靠木其它相关文章!

MySQL 相关文章推荐
新手必备之MySQL msi版本下载安装图文详细教程
May 21 MySQL
详解MySQL中的主键与事务
May 27 MySQL
Mysql数据库按时间点恢复实战记录
Jun 30 MySQL
MySQL基础快速入门知识总结(附思维导图)
Sep 25 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 MySQL
分享MySQL常用 内核 Debug 几种常见方法
Mar 17 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
MySQL创建管理子分区
Apr 13 MySQL
MySQL普通表如何转换成分区表
May 30 MySQL
MySQL创建索引需要了解的
Apr 08 #MySQL
MySQL 使用SQL语句修改表名的实现
详解Mysql 函数调用优化
Apr 07 #MySQL
MySQL复制问题的三个参数分析
Apr 07 #MySQL
MySQL pt-slave-restart工具的使用简介
Apr 07 #MySQL
MySQL主从复制断开的常用修复方法
Apr 07 #MySQL
MySQL infobright的安装步骤
Apr 07 #MySQL
You might like
php实现图片文件与下载文件防盗链的方法
2014/11/03 PHP
ThinkPHP模型详解
2015/07/27 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
微信小程序template模板实例详解
2017/10/27 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
python+mongodb数据抓取详细介绍
2017/10/25 Python
Python Nose框架编写测试用例方法
2017/10/26 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
Django实现支付宝付款和微信支付的示例代码
2018/07/25 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python机器学习库scikit-learn:SVR的基本应用
2019/06/26 Python
Pytorch释放显存占用方式
2020/01/13 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
城市规划毕业生求职信
2013/10/10 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
承诺函格式模板
2015/01/21 职场文书
2015年公务员工作总结
2015/04/24 职场文书
运动会表扬稿范文
2015/05/05 职场文书
主持人大赛开场白
2015/05/29 职场文书
2016大学生就业指导课心得体会
2016/01/15 职场文书
2016年教师党员公开承诺书
2016/03/24 职场文书