接上一篇Mysql主从复制的搭建-基于Docker,本文介绍用Maxwell假装成mysql从节点,接收binlog的使用。java
maxwell是由java编写的守护进程,能够实时读取mysql binlog并将行更新以JSON格式写入kafka、rabbitMq、redis等中, 这样有了mysql增量数据流,使用场景就不少了,好比:实时同步数据到缓存,同步数据到ElasticSearch,数据迁移等等。mysql
maxwell官网:http://maxwells-daemon.iogit
maxwell源代码:https://github.com/zendesk/maxwellgithub
1.下载Maxwell安装包redis
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日志sql
[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的实战:ide
[root@xxx maxwell-1.19.5]# vi /usr/local/maxwell/maxwell-1.19.5/config.properties #日志级别 log_level=DEBUG producer=rabbitmq daemon=true #监控的数据库 host=47.105.110.xxx user=yhrepl password=scgaopan output_nulls=true jdbc_options=autoReconnet=true #监控数据库中的哪些表 filter=exclude: *.*,include: test.AA 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:ui
[root@xxx maxwell-1.19.5]# ./bin/maxwell #能够后台启动 [root@xxx maxwell-1.19.5]# nohub ./bin/maxwell &
rabbitmq的操做,启动maxwell后就有一个maxwell的exchage生成
但对应的queue和exchange和queue的绑定须要用户本身去实现
新建一个maxwell-test的queue:
把queue与exchange进行绑定:
注意,这里的Routing key 是区分大小写的
在数据库中修改一条记录,能够看到maxwell-test队列里面有一第记录了。