如何使用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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL安装后默认自带数据库的作用详解
Apr 27 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
MySQL单表千万级数据处理的思路分享
Jun 05 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
单机多实例部署 MySQL8.0.20
May 15 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
mysqldump进行数据备份详解
Jul 15 MySQL
MySQL 原理与优化之Limit 查询优化
Aug 14 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面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
document.getElementBy("id")与$("#id")有什么区别
2013/09/22 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
python脚本设置超时机制系统时间的方法
2016/02/21 Python
python 处理string到hex脚本的方法
2018/10/26 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
建筑学推荐信
2013/11/03 职场文书
歌唱比赛主持词
2014/03/18 职场文书
公司晚会主持词
2014/03/22 职场文书
航空学院求职信
2014/06/11 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
企业法人授权委托书
2014/09/25 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
导游词之南京中山陵
2019/11/27 职场文书