使用 Canal 实时从 MySql 向其它库同步数据

目前绝大多数项目还是采用 mysql 作为数据存储,对于用户访问量较高的网站来说,mysql 读写性能有限,我们通常会把 mysql 中的数据实时同步到 Redis、mongodb、elastic search 等中间件中,应对高并发访问场景,减轻 mysql 压力,防止数据库宕机。在项目开发中,为了不会原有代码进行侵入,采用 canal 中间件实现 mysql 向其它库的实时同步,是一种很不错的方案。

canal 译意为水道/管道/沟渠,主要用途是基于 mysql 数据库增量日志解析,提供增量数据订阅和消费,其工作原理是:模拟 mysql slave 的交互协议,伪装自己为 mysql slave ,向 mysql master 发送 dump 协议,mysql master 收到 dump 请求,开始推送 binary log 给 canal,canal 解析 binary log 提供出对具体表数据的增删改操作内容。

本篇博客将采用 docker-compose 搭建 mysql 和 canal,并采用代码方式演示如果使用 canal 从mysql 中同步数据,监听对数据表的增删改操作。在本篇博客的最后会提供源代码下载。

Canal 的 gitHub 地址为:GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件

一、部署 mysql 和 canal

本篇博客使用虚拟机进行部署,我的虚拟机操作系统是 CentOS7(ip 地址是 192.168.136.128),已经安装好了 docker 和 docker-compose ,首先我们先创建好相关的目录,我创建的主目录是 /app/canal,具体结构如下:

image

在 /app/canal 创建一个 mysql 目录,在 mysql 下创建一个 data 目录,并创建了 mysql 的配置文件 my.cnf

首先列出 mysql 的配置文件 my.cnf 的内容,主要配置是开启 binlog 日志:

 
[mysqld]
# 开启 binlog
log-bin=mysql-bin
# canal 需要使用 ROW 模式
binlog-format=ROW
# 如果你只想同步部分数据库的话,可以进行如下配置
# 如果同步多个数据库的话,可以配置多行。
# 如果不配置的话,默认是 mysql 所有库都进行同步
# binlog-do-db=canaldb
# binlog-do-db=mytestdb
# 不要和 canal 的 slaveId 重复,mysql 默认是 1
server-id=1
# 数据目录
datadir=/var/lib/mysql
symbolic-links=0
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

然后在 /app/canal 下创建 docker-compose.yml 文件,内容如下:

 
version: "3.5"
services:
mysql-server:
image: mysql:5.7.42
container_name: mysql-server
restart: always
ports:
- 3306:3306
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值