maxwell同步mysql到es_使用Maxwell实时同步mysql数据

接上一篇Mysql主从复制的搭建-基于Docker,本文介绍用Maxwell伪装成mysql从节点,接收binlog的使用。

Maxwell简介

maxwell是由java编写的守护进程,可以实时读取mysql binlog并将行更新以JSON格式写入kafka、rabbitMq、redis等中,  这样有了mysql增量数据流,使用场景就很多了,比如:实时同步数据到缓存,同步数据到ElasticSearch,数据迁移等等。

Maxwell的配置与使用

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

#监控的数据库

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:

[root@xxx maxwell-1.19.5]# ./bin/maxwell

#可以后台启动

[root@xxx maxwell-1.19.5]# nohub ./bin/maxwell &

rabbitmq的操作,启动maxwell后就有一个maxwell的exchage生成

0f1681007277cb84a8b4d2ff829744b4.png

但对应的queue和exchange和queue的绑定需要用户自己去实现

新建一个maxwell-test的queue:

maxwell同步mysql到es_使用Maxwell实时同步mysql数据_第1张图片

把queue与exchange进行绑定:

maxwell同步mysql到es_使用Maxwell实时同步mysql数据_第2张图片

注意,这里的Routing key 是区分大小写的

在数据库中修改一条记录,可以看到maxwell-test队列里面有一第记录了。

maxwell同步mysql到es_使用Maxwell实时同步mysql数据_第3张图片

你可能感兴趣的:(maxwell同步mysql到es_使用Maxwell实时同步mysql数据)