Canal+RabbitMQ数据同步环境配置

Canal 是阿里巴巴开发的开源工具,主要用于解析 MySQL 的 binlog 日志,从而实现数据同步。Canal 会模拟 MySQL 从库的协议,订阅主库的 binlog,从而获取数据库的变更信息。

将 Canal 解析到的 MySQL 数据库变更消息通过 RabbitMQ 分发给下游的消费服务。RabbitMQ 在这个场景中充当消息中间件,保证消息的可靠传递和队列管理。

大致流程:

  1. MySQL 发生数据变更(插入、更新、删除等)。
  2. Canal 订阅 MySQL 的 binlog,解析出变更的具体数据。
  3. Canal 通过 RabbitMQ 将变更数据发送到指定队列。
  4. RabbitMQ 分发消息,下游消费者监听并处理消息,完成数据同步。

1. 配置Mysql主从同步

在 MySQL 中开启 binlog,并配置一个从库账号,供 Canal 使用。

1.1 修改 MySQL 配置文件 my.cnf ,确保开启 binlog 和 ROW 格式。

在MySQL配置文件my.cnf设置如下信息,开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,ROW 模式表示以行为单位记录每个被修改的行的变更。

修改如下:

vi /usr/mysql/conf/my.cnf

XML 复制代码
[mysqld]
#打开binlog
log-bin=mysql-bin
#选择ROW(行)模式
binlog-format=ROW
#配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1

1.2 创建 Canal 用户,并赋予足够的权限来读取 binlog。

进入mysql容器:docker exec -it mysql /bin/bash

-- 使用命令登录:mysql -u root -p

-- 创建用户 用户名:canal 密码:canal

sql 复制代码
create user 'canal'@'%' identified WITH mysql_native_password by 'canal';

-- 授权 *.*表示所有库

sql 复制代码
GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
  • SELECT: 允许用户查询(读取)数据库中的数据。

  • REPLICATION SLAVE : 允许用户作为 MySQL 复制从库,用于同步主库的数据。

  • REPLICATION CLIENT: 允许用户连接到主库并获取关于主库状态的信息。

1.3 重启MySQL,查看配置信息

(1)使用命令查看是否打开binlog模式:SHOW VARIABLES LIKE 'log_bin';

ON表示开启binlog模式。

(2)show variables like 'binlog_format';

当 binlog_format 的值为 row 时,表示 MySQL 服务器当前配置为使用行级别的二进制日志记录,这对于数据库复制和数据同步来说更为安全,因为它记录了对数据行的确切更改。

(3)查看binlog日志文件列表:SHOW BINARY LOGS;

(4)查看当前正在写入的binlog文件:SHOW MASTER STATUS;

2. 安装Canal

2.1 获取canal镜像

docker pull canal/canal-server:latest

2.2 配置 Canal 连接到 MySQL

修改 Canal 配置文件 conf/example/instance.properties,配置 Canal 连接到 MySQL。

XML 复制代码
# MySQL 连接信息
canal.instance.master.address = 127.0.0.1:3306
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal_password
canal.instance.defaultDatabaseName = your_db_name

2.3 配置 RabbitMQ 作为消息推送的目标

配置 Canal 的 conf/canal.properties 文件,集成 RabbitMQ 作为消息推送的目标。

XML 复制代码
# 配置 Canal 的 MQ 发送
canal.mq.servers = 127.0.0.1:5672
canal.mq.queue = example_queue   # 指定RabbitMQ的队列
canal.mq.exchange = canal-exchange
canal.mq.username = guest
canal.mq.password = guest

2.4 启动 Canal Server

XML 复制代码
sh bin/startup.sh

3. 安装RabbitMQ

3.1 拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/itheima/rabbitmq:3.9.17-management-delayed

3.2 启动rabbitmq管理端

使用 RabbitMQ 管理界面(通常位于 http://localhost:15672),创建一个 exchange 和 queue,并配置消息路由。

bash 复制代码
# 启动rabbitmq管理端
rabbitmq-plugins enable rabbitmq_management
# 启动延迟队列插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
相关推荐
打工仔折腾 AI2 小时前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 的建表与增删改查手法
数据库·人工智能·后端·python·sql·编辑器·ai agent 实战
CNSSIRD数据库2 小时前
中国省地县乡四级行政建制及区划代码-2025年版
大数据·数据库·数据分析·论文笔记
for_ever_love__3 小时前
LangGraph Checkpointer:持久化、断点续跑与多轮记忆
服务器·数据库·学习·持久化·langgraph·checkpointer·断点续跑
Data analyse4563 小时前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
Lhan.zzZ3 小时前
Linux + Qt/QML:解决 QtQuick.VirtualKeyboard.Plugins 模块加载失败与环境变量配置
linux·数据库·qt
大圣编蚕3 小时前
Redis 为什么快?现在还是单线程吗?
数据库·redis·缓存
鸥梨菌Honevid3 小时前
UVM 面试高频:uvm_test_top 与 uvm_config_db 路径机制全解析
数据库·面试·职场和发展
极小狐3 小时前
MR 里测试摘要空白、覆盖率不显示?JUnit 与覆盖率配置 9 步排查
数据库·ci/cd·junit·单元测试·mr·devops·代码覆盖率
silvamux_3 小时前
MiniMax API 调用教程:兼容 OpenAI 写法
java·数据库·elasticsearch
zh73143 小时前
sqlforge一个SQL 格式化与方言转换工具
数据库·sql