• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    如何使用Maxwell实时同步mysql数据

    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生成

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

    新建一个maxwell-test的queue:

    把queue与exchange进行绑定:

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

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

    全量同步

    使用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数据的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • python实现MySQL指定表增量同步数据到clickhouse的脚本
    • MySQL数据库主从同步实战过程详解
    • scrapy数据存储在mysql数据库的两种方式(同步和异步)
    • Mysql主从数据库(Master/Slave)同步配置与常见错误
    • ktl工具实现mysql向mysql同步数据方法
    • 用python简单实现mysql数据同步到ElasticSearch的教程
    • MySQL数据库的主从同步配置与读写分离
    • node.js将MongoDB数据同步到MySQL的步骤
    • Linux下MySQL数据库的主从同步复制配置
    • PHP使用SWOOLE扩展实现定时同步 MySQL 数据
    上一篇:MySQL创建索引需要了解的
    下一篇:MySQL Innodb关键特性之插入缓冲(insert buffer)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    如何使用Maxwell实时同步mysql数据 如何,使用,Maxwell,实时,同步,