如何使用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表字段时间设置默认值
May 13 MySQL
MySQL 逻辑备份与恢复测试的相关总结
May 14 MySQL
详解MySQL中的pid与socket
Jun 15 MySQL
MySQL一些常用高级SQL语句
Jul 03 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
MySQL时区造成时差问题
Apr 13 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL 计算连续登录天数
May 11 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
May 08 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中的Cannot modify header information 问题
2013/08/12 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
python实现360皮肤按钮控件示例
2014/02/21 Python
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
python 循环while和for in简单实例
2016/08/16 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
Django中的AutoField字段使用
2020/05/18 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
创文明城市标语
2014/06/16 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年办税服务厅工作总结
2015/07/23 职场文书
小学体育组工作总结
2015/08/13 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL