如何使用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 26 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
MySQL笔记 —SQL运算符
Jan 18 MySQL
教你如何让spark sql写mysql的时候支持update操作
Feb 15 MySQL
mysql查询结果实现多列拼接查询
Apr 03 MySQL
Mysql排查分析慢sql之explain实战案例
Apr 19 MySQL
MySql数据库触发器使用教程
Jun 01 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分页思路以及在ZF中的使用
2012/05/30 PHP
PHP内核探索:变量概述
2014/01/30 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php实现使用正则将文本中的网址转换成链接标签
2014/12/03 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
php 的反射详解及示例代码
2016/08/25 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
JavaScript中cookie工具函数封装的示例代码
2016/10/11 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
js for终止循环 跳出多层循环
2018/10/04 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python3简单实现微信爬虫
2015/04/09 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
python游戏地图最短路径求解
2019/01/16 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
this关键字的作用
2016/01/30 面试题
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
通信工程求职信
2014/07/16 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
python调试工具Birdseye的使用教程
2021/05/25 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python