如何使用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 24 MySQL
MySQL中使用or、in与union all在查询命令下的效率对比
May 26 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
Mysql关于数据库是否应该使用外键约束详解说明
Oct 24 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
mysql数据插入覆盖和时间戳的问题及解决
Mar 25 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
mysql sql常用语句大全
Jun 21 MySQL
关于MySQL中explain工具的使用
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 arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP中的浅复制与深复制的实例详解
2017/10/26 PHP
浅谈javascript中基本包装类型
2015/06/03 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
vue.js 双层嵌套for遍历的方法详解, 类似php foreach()
2018/09/07 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
浅谈flask源码之请求过程
2018/07/26 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
pytorch打印网络结构的实例
2019/08/19 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
2019/08/21 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
澳洲Chemist Direct药房中文网:澳洲大型线上直邮药房
2019/11/04 全球购物
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
出纳担保书范文
2014/04/02 职场文书
儿童生日会策划方案
2014/05/15 职场文书
应届大学生求职信
2014/07/20 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
五月的鲜花活动方案
2014/08/21 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
实验室安全管理制度
2015/08/05 职场文书
承诺书的内容有哪些,怎么写?
2019/06/21 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis