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

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

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

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

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

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这个库的操作权限。

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中,输入以下命令。

show master status;

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

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

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主从同步的环境搭建完成。

阅读剩余 83%

转载作品,原作者:袁庭新,文章来源:https://www.toutiao.com/article/7439632555072176694

(0)
打赏 微信赞赏 微信赞赏 支付宝赞赏 支付宝赞赏
上一篇 2024-08-23 16:40
下一篇 2025-02-19 11:54

相关推荐

  • 让 AI 对接 MySQL 数据库实现快速问答对话

    一、场景说明: 通过 AI 连接 MySQL 结构化数据库表,预期实现通过AI对话数据库表,快速了解数据情况,能够进行简单的汇总统计,快是实现问答。 二、资源准备: 需提前准备以下…

    2025-04-16 AI工具与开发实战指南
    1290
  • MySQL 配置文件 my.cnf / my.ini 逐行详解

    MySQL 配置文件的意义充分理解 MySQL 配置文件中各个变量的意义对我们有针对性的优化 MySQL 数据库性能有非常大的意义。我们需要根据不同的数据量级,不同的生产环境情况对…

    MySQL 2022-01-09
    6080
  • mysql主从同步设置小记

    主服务器很好配置, 分配一个唯一的server-id, 开启log-bin如下 #开启bin日志 log-bin=mysql-bin #主库上限定需要同步的dbname binlo…

    MySQL 2021-12-04
    5110
  • MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化

    在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。而导致这个问题竟然是 MySQL 进程,按理说如果 MySQL 运行稳定,服务器的 CPU 资源并不会跑满,如果出现这个问题,初步可以断定,是 MySQL 实例中出现了问题 SQL。

    MySQL 2022-03-11
    8170
  • 如何在两台服务器之间迁移 MySQL / MariaDB 数据库 阿里云腾讯云迁移案例

    MySQL 数据库迁移的需求非常常见,测试数据库迁移至生产数据库,从一台服务器,迁移至另一台服务器,又或者是从一个云服务商迁移至另一个云服务商。不同的需求使用不同的迁移方法,总体来…

    2022-01-21 MySQL
    8700
  • mydumper 备份工具介绍与使用

    开源工具 mydumper 同样适用于 MySQL 的逻辑备份。之前一直没有正式体验过,只是听说比 mysqldump 要快很多,具体使用效果如何, 一起来看下吧。 1. mydu…

    MySQL 2022-01-25
    7110

发表回复

登录后才能评论
扫码了解
扫码了解
反馈建议
分享本页
返回顶部