Cannal实现MySQL主从同步环境搭建

devtools/2024/11/26 9:02:27/

大家好,我是袁庭新

在多数情况下,客户端往往会优先获取缓存中的数据。然而,当缓存数据与数据库中的实际数据存在显著不一致时,可能会导致严重的后果。因此,确保数据库与缓存数据之间的一致性变得至关重要,这一过程被称为缓存与数据库的同步。

canal [kə’næl],译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。canal是阿里巴巴旗下的一款开源项目,基于Java开发。

而canal就是把自己伪装成MySQL的一个Slave节点,从而监听master的binary log变化。再把得到的变化信息通知给canal的客户端,进而完成对其它数据库的同步。

在这里插入图片描述

1 安装MySQL

后期做数据同步需要用到MySQL的主从功能,所以需要大家在虚拟机中,利用Docker来运行一个MySQL容器。

1.1 准备目录

为了方便后期配置MySQL,我们先准备两个目录,用于挂载容器的数据和配置文件目录。

# 进入/tmp目录
cd /tmp
# 创建文件夹
mkdir mysql
# 进入mysql目录
cd mysql

1.2 运行命令

进入mysql目录后,执行下面的Docker命令:

docker run \-p 3306:3306 \--name mysql \-v $PWD/conf:/etc/mysql/conf.d \-v $PWD/logs:/logs \-v $PWD/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 \--privileged \-d \mysql:5.7.25

1.3 修改配置

在/tmp/mysql/conf目录添加一个my.cnf文件,作为mysql的配置文件:

# 创建文件
touch /tmp/mysql/conf/my.cnf

文件的内容如下:

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000

1.4 重启MySQL

配置修改后,必须重启容器。

docker restart mysql

下面我们来开启MySQL的主从同步机制,让canal来模拟Salve。

2 开启MySQL主从

canal是基于MySQL的主从同步功能,因此必须先开启MySQL的主从功能才可以。这里以之前用Docker运行的MySQL为例。

2.1 开启binlog

打开mysql容器挂载的日志文件,我的在/tmp/mysql/conf目录下。

修改my.cnf文件。

vi /tmp/mysql/conf/my.cnf

添加log-bin参数和binlog-do-db参数的配置,代码如下。

log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=springboot_data

上述参数的含义是:

  • log-bin参数:log-bin参数用于启用二进制日志功能,并指定二进制日志文件的前缀。二进制日志记录了所有对数据库进行更改的SQL语句(例如,INSERT、UPDATE、DELETE等)。
  • binlog-do-db参数:用于指定只记录特定数据库的更改到二进制日志中。当配置了binlog-do-db后,MySQL只会将指定数据库的更改写入二进制日志,对于其他数据库的更改则不会记录。这个参数在需要限制二进制日志内容、减少日志量或者在进行部分复制时非常有用。

以上步骤操作完成后,此时my.cnf文件的完整内容见下。

[mysqld]
skip-name-resolve
character_set_server=utf8
datadir=/var/lib/mysql
server-id=1000
log-bin=/var/lib/mysql/mysql-bin
binlog-do-db=springboot_data

2.2 设置用户权限

1.接下来添加一个仅用于数据同步的账户,出于安全考虑,这里仅提供对heima这个库的操作权限。

mysql">CREATE USER canal@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%' identified by 'canal';
FLUSH PRIVILEGES;

2.然后重启mysql容器即可。

docker restart mysql

3.测试设置是否成功。在MySQL控制台,或者Navicat中,输入以下命令。

mysql">show master status;

4.如果现实效果如下图所示,则表明配置成功。

在这里插入图片描述

3 安装canal

3.1 创建网络

我们需要创建一个网络,将MySQL、Canal、MQ放到同一个Docker网络中。

docker network create yuanxin

mysql加入这个网络。

docker network connect yuanxin mysql

3.2 安装canal

提前下载好canal的镜像压缩包(如canal.tar),然后可以上传到虚拟机,最后通过命令导入。

docker load -i canal.tar

然后运行命令创建Canal容器:

docker run -p 11111:11111 --name canal \
-e canal.destinations=yuanxin \
-e canal.instance.master.address=mysql:3306  \
-e canal.instance.dbUsername=canal  \
-e canal.instance.dbPassword=canal  \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false  \
-e canal.instance.filter.regex=springboot_data\\..* \
--network yuanxin \
-d canal/canal-server:v1.1.5

下面是命令的详细解释:

  • docker run: Docker的命令,用于运行一个新的容器实例。
  • -p 11111:11111: 端口映射参数(canal的默认监听端口)。将容器内的11111端口映射到宿主机的11111端口上,这样就可以通过宿主机的端口访问容器内运行的服务。
  • --name canal: 为这个容器实例指定一个名字,这里命名为"canal"。
  • -e canal.destinations=yuanxin: 设置环境变量canal.destinations的值为yuanxin。这个变量指定了Canal实例的目标名称,Canal可以支持多个实例同时运行,每个实例都需要一个唯一的名称。
  • -e canal.instance.master.address=mysql:3306: 设置环境变量canal.instance.master.address的值为mysql:3306,指定了Canal要连接的MySQL数据库的地址和端口。
  • -e canal.instance.dbUsername=canal: 设置环境变量canal.instance.dbUsername的值为canal,指定了连接MySQL数据库的用户名。
  • -e canal.instance.dbPassword=canal: 设置环境变量canal.instance.dbPassword的值为canal,指定了连接MySQL数据库的密码。
  • -e canal.instance.connectionCharset=UTF-8: 设置环境变量canal.instance.connectionCharset的值为UTF-8,指定了连接MySQL数据库时使用的字符集。
  • -e canal.instance.tsdb.enable=true: 设置环境变量canal.instance.tsdb.enable的值为true,启用时间戳数据库,用于记录Canal解析和处理的位置信息。
  • -e canal.instance.gtidon=false: 设置环境变量canal.instance.gtidon的值为false,表示不启用全局唯一ID生成器。
  • -e canal.instance.filter.regex=springboot_data\\..*: 设置环境变量canal.instance.filter.regex的值为springboot_data\\..*,这是一个正则表达式,用于指定Canal需要监控和同步的数据库和表。这里的意思是监控名为springboot_data数据库下的所有表。
  • --network yuanxin: 指定容器运行的网络模式为yuanxin,这意味着容器将加入名为yuanxin的Docker网络,可以与同一网络内的其他容器进行通信。
  • -d canal/canal-server:v1.1.5: 指定容器使用的镜像为canal/canal-server,版本为v1.1.5,并且以守护进程(后台)模式运行容器。

至此,使用canal实现MySQL主从同步的环境搭建完成。


http://www.ppmy.cn/devtools/137071.html

相关文章

40分钟学 Go 语言高并发:【实战】并发安全的配置管理器(功能扩展)

【实战】并发安全的配置管理器(功能扩展) 一、扩展思考 分布式配置中心 实现配置的集中管理支持多节点配置同步实现配置的版本一致性 配置加密 敏感配置的加密存储配置的安全传输访问权限控制 配置格式支持 支持YAML、TOML等多种格式配置格式自动…

【ChatGPT大模型开发调用】如何获得 OpenAl API Key?

如何获取 OpenAI API Key 获取 OpenAI API Key 主要有以下三种途径: OpenAI 官方平台 (推荐): 开发者用户可以直接在 OpenAI 官方网站 (platform.openai.com) 注册并申请 API Key。 通常,您可以在账户设置或开发者平台的相关页面找到申请入口。 Azure…

Unity3D 客户端网络角色的操作与行为分离设计详解

前言 在网络游戏中,客户端网络角色的操作与行为分离设计是非常重要的,它可以提高游戏的可维护性和扩展性,同时也可以提升游戏的性能和用户体验。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下…

stable diffusion生成模型

1、stable diffusion Stable Diffusion 是一种扩散模型,基于对图像的逐步去噪过程训练和生成。它的核心包括以下几个步骤: 扩散过程(Diffusion Process)在训练时,向真实图像逐步添加噪声,最终将其变为纯随机噪声。这是一个正向过程,目的是学习如何将复杂的图像分解成随…

【Github】如何使用Git将本地项目上传到Github

【Github】如何使用Git将本地项目上传到Github 写在最前面1. 注册Github账号2. 安装Git工具配置用户名和邮箱仅为当前项目配置(可选) 3. 创建Github仓库4. 获取仓库地址5. 本地操作(1)进入项目文件夹(2)克隆…

自制Windows系统(十)

上图 (真的不是Windows破解版) 开源地址:仿Windows

【C语言】野指针问题详解及防范方法

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是野指针?💯未初始化的指针代码示例问题分析解决方法 💯指针越界访问代码示例问题分析解决方法 💯指向已释放内存的…

【C语言】传值调用与传址调用:深度解析与实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 💯前言💯什么是传值调用和传址调用?1. 传值调用(Call by Value)2. 传址调用(Call by Reference) 💯传值调…