您的位置:首页 > 数据库 > > 正文

mysql快速备份数据(如何使用Maxwell实时同步mysql数据)

更多 时间:2021-10-18 11:54:51 类别:数据库 浏览量:1723

mysql快速备份数据

如何使用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安装包

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 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日志

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • [root@xxx mysql]# vi /usr/local/mysql/my.cnf
  •  
  • [mysqld]
  • log-bin=mysql-bin #添加这一行就
  • binlog-format=row #选择row模式
  • server_id=1 #随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
  • 重启mysql服务,登陆mysql,查看binlog日志模式

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 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),所以需要提前给权限:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • #创建一个有同步数据的用户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的实战:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • [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:

  • ?
  • 1
  • 2
  • 3
  • [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生成

    mysql快速备份数据(如何使用Maxwell实时同步mysql数据)

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

    新建一个maxwell-test的queue:

    mysql快速备份数据(如何使用Maxwell实时同步mysql数据)

    把queue与exchange进行绑定:

    mysql快速备份数据(如何使用Maxwell实时同步mysql数据)

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

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

    mysql快速备份数据(如何使用Maxwell实时同步mysql数据)

    全量同步

    使用maxwell-bootstrap命令

  • ?
  • 1
  • ./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

  • ?
  • 1
  • ./bin/maxwell --client_id maxwell_dev
  • 等待执行完成即可

    以上就是如何使用maxwell实时同步mysql数据的详细内容,更多关于用maxwell同步mysql数据的资料请关注开心学习网其它相关文章!

    原文链接:https://cloud.tencent.com/developer/article/1705132

    您可能感兴趣