Canal(2):Canal 部署与配置
这篇文章虽然详细介绍了Canal的部署与配置,但背后隐藏着一个更大的问题:如何高效地处理数据同步?Canal作为阿里开源的MySQL数据库增量日志解析工具,确实解决了数据实时同步的痛点,但你有没有想过,为什么我们需要它?因为我们不想在数据更新时手动敲代码,简直是“懒人”的福音!不过,部署Canal时,你有没有遇到过Binlog配置失败、实例冲突、权限问题等坑?这就像你在打游戏时卡在某个关卡,气不打一处来。
那么,如何避免这些问题呢?首先,确保MySQL的Binlog开启,这是Canal工作的第一步。其次,权限配置要细致,别以为随便赋个权限就完事了,否则Canal可能会“罢工”。最后,多实例配置时,记得每个实例的slaveId不能重复,否则就像两个人在同一频道上同时说话,谁听得清?
总之,Canal虽然强大,但配置不当也会让人抓狂。想要让它跑得顺畅,关键是要理解每一个步骤背后的逻辑,而不是简单复制粘贴。下次再遇到问题,可以尝试从配置文件入手,逐一排查,别急着甩锅给工具!
1 mysql数据库配置
1.1新建数据库
1.2 新建测试表
CREATE TABLE user_info(`id` VARCHAR(255),`name` VARCHAR(255),`sex` VARCHAR(255)
);
1.3 修改配置文件开启 Binlog
vim /etc/my.cnf
server-id=4
log-bin=mysql-bin
binlog_format=row
binlog-do-db=caneltestdb
1.4 重启MySQL使配置生效
systemctl restart mysqld
到/var/lib/mysql 目录下查看初始文件大小 154
1.5 测试 Binlog 是否开启
插入数据
INSERT INTO user_info VALUES('1001','zhangsan','male');
再次到/var/lib/mysql 目录下,查看 index 文件的大小
1.6 赋权限
在 MySQL 中执行
mysql> set global validate_password_length=4;
mysql> set global validate_password_policy=0;
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal' ;
2 canel部署与配置
2.1 下载并解压 Jar 包
https://github.com/alibaba/canal/releases
这边使用的是 canal.deployer-1.1.6.tar.gz版本
拷贝到/opt/sortware 目录下,然后解压到/opt/module/canal 包下(目录自己定)
注意:canal 解压后是分散的,我们在指定解压目录的时候需要将 canal 指定上
2.2 修改 canal.properties 的配置
vim conf/canal.properties
修改内容如下:
说明:这个文件是 canal 的基本通用配置,canal 端口号默认就是 11111,修改 canal 的输出 model,默认 tcp,改为输出到 kafka
多实例配置如果创建多个实例,通过前面 canal 架构,我们可以知道,一个 canal 服务中可以有多个 instance,conf/下的每一个 example 即是一个实例,每个实例下面都有独立的配置文件。默认只有一个实例 example,如果需要多个实例处理不同的 MySQL 数据的话,直接拷贝出多个 example,并对其重新命名,命名和配置文件中指定的名称一致,然后修改canal.properties 中的 canal.destinations=实例 1,实例 2,实例 3。
2.3 修改 instance.properties
我们这里只读取一个 MySQL 数据,所以只有一个实例,这个实例的配置文件在conf/example目录下
vim conf/example/instance.properties
(1)配置 MySQL 服务器地址
注意:
canal.instance.mysql.slaveId的值不能和mysql中配置的server-id相同。
(2)配置连接MySQL的用户名和密码,默认就是我们前面授权的canal
2.4 启动canal
sh bin/startup.sh
启动成功如下