×

MySQL 实时同步神器 Canal 安装部署与实战测试指南

hqy hqy 发表于2025-08-05 02:11:56 浏览4 评论0

抢沙发发表评论

MySQL 实时同步神器 Canal 安装部署与实战测试指南

? 实时数据同步、数据库变更监听、高性能缓存刷新、搜索引擎同步,一套工具搞定!


? 什么是 Canal?

Canal 是阿里巴巴开源的 MySQL Binlog 增量订阅&消费中间件,最初用于阿里巴巴内部 MySQL → HBase/ES 的同步。如今,它是企业实现 实时数据同步 和 数据库 CDC(变更捕获) 的首选方案之一。


? 典型应用场景

  • • MySQL → Elasticsearch 实时搜索同步
  • • MySQL → Kafka → 多系统数据总线
  • • 数据库缓存自动更新(如 Redis)
  • • 实时监控审计数据库操作

? 安装前准备

环境需求:

环境
版本建议
操作系统
Linux / Windows / Mac
JDK
1.8+
MySQL
5.6+(推荐 5.7/8.0)
Canal 版本
1.1.7(稳定)


⚙️ 一、MySQL 配置(开启 Binlog)

修改 MySQL 配置文件(my.cnf):

[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW

binlog-format=ROW 是 Canal 支持的格式。
保存后重启 MySQL:

systemctl restart mysqld

创建 Canal 用户并授权:

CREATE USER 'canal'@'%' IDENTIFIED BY 'canal123';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;

⬇️ 二、部署 Canal 服务端

1. 下载 Canal 部署包

wget https://github.com/alibaba/canal/releases/download/canal-1.1.7/canal.deployer-1.1.7.tar.gz
tar zxvf canal.deployer-1.1.7.tar.gz
cd canal.deployer-1.1.7

2. 配置连接 MySQL

编辑 conf/example/instance.properties

canal.instance.master.address=127.0.0.1:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal123
canal.instance.connectionCharset = UTF-8
canal.instance.tsdb.enable=true

▶️ 三、启动 Canal 服务

sh bin/startup.sh

查看启动日志:

tail -f logs/canal/canal.log
tail -f logs/example/example.log

如有 Canal started 字样,说明服务已启动成功。



? 四、案例实战:实时同步测试

1. 创建测试库和表:

CREATE DATABASE testdb;
USE testdb;
CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(50));
INSERT INTO user VALUES (1'Alice');

2. 编写 Java 客户端消费 binlog

可基于 Canal 官方示例编写 Consumer,也可以使用现成的 canal-adapter(同步 Kafka / ES)。

? 完整 Java 代码、Kafka 接入、ES 同步配置可留言获取!


? 五、可视化管理(Canal Admin)

Canal 提供 Web 控制台 canal.admin,用于图形化配置和监控同步任务。


  • • 下载 canal.admin 包
git clone https://github.com/alibaba/canal.git
cd canal
# 切换到 1.1.5 分支或 tag
mvn clean package -DskipTests
# 找到 admin/target/canal.admin-1.1.5-SNAPSHOT.tar.gz
tar zxvf canal.admin-1.1.5-SNAPSHOT.tar.gz
cd canal.admin-1.1.5-SNAPSHOT
  • • 配置数据库连接 conf/canal_admin.properties
server.port=8089

spring.datasource.address=127.0.0.1:3306
spring.datasource.database=canal_manager
spring.datasource.username=root
spring.datasource.password=123456

canal.adminUser=admin
canal.adminPasswd=admin123
  • • 浏览器访问 http://your-ip:8089
sh bin/startup.sh

? 高级玩法推荐

玩法
简述
多实例同步
一个 Canal 监控多个 MySQL
Kafka 集成
Canal → Kafka → 消费者
ElasticSearch
Canal Adapter → 实时搜索
Redis 缓存刷新
变更触发自动更新缓存
Docker 部署
容器化快速部署 Canal


常见问题 FAQ

问题
解决建议
无法连接 MySQL
检查授权、防火墙、IP 绑定
无同步数据
确认 Binlog 格式为 ROW,表数据有变化
Canal 日志乱码
设置 charset=UTF-8
CPU 占用高
控制抓取表数量,调整 Canal buffer


打赏

本文链接:https://www.kinber.cn/post/5405.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客