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),创建一个 exchangequeue,并配置消息路由。

bash 复制代码
# 启动rabbitmq管理端
rabbitmq-plugins enable rabbitmq_management
# 启动延迟队列插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
相关推荐
CodexDave4 分钟前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes
播播资源35 分钟前
智能路由(AI Router):用“虚拟模型”撬动无限算力,从此告别手动切换
数据库
六bring个六42 分钟前
分布式软总线认证模块架构与实现分析
分布式·架构·open harmony
熊文豪1 小时前
【金仓数据库征文】不装中间件的 MySQL→金仓在线迁移,mysql_fdw 全流程,和一个差点漏掉的 emoji
数据库·mysql·中间件·电科金仓
C++、Java和Python的菜鸟1 小时前
第5章 后端Web基础 (MySQL基础)
前端·mysql·adb
一个儒雅随和的男子1 小时前
多租户方案的选型
数据库·oracle
listening7772 小时前
HarmonyOS 6.1 跨设备数据库实战:分布式账本的落地与一致性校验
数据库·harmonyos·分布式账本
147API2 小时前
Claude Tag 进入 Slack 后,团队智能体需要哪些任务与审计字段
java·开发语言·数据库
Database_Cool_2 小时前
AI Agent 应用数据库选型:阿里云 PolarDB-X 高并发分布式数据底座
数据库·人工智能·阿里云
黄焖鸡能干四碗2 小时前
IT数据架构规划设计方案(PPT文件)
大数据·网络·数据库·人工智能·架构·区块链