canal数据同步的环境配置
前提:在linux和windows系统的mysql数据库中创建相同结构的数据库和表,我的linux中mysql是用docker实现的(5.7版本),拉取mysql镜像后,当我们创建容器时,一定要记得对目录进行挂载,否则后期是无法开启logbin功能的。
1.开启mysql的logbin功能
1 2 3 4 5 6 7 8 9 10 | #拉取镜像 docker pull mysql #创建容器 docker run -p 33306 : 3306 --name mysql -v /root/mysql/conf:/etc/mysql/mysql.conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -di mysql |
(1)可以通过进入mysql然后修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
1 2 3 4 5 6 | docker exec -it mysql /bin/bash cd /etc/mysql/mysql.conf.d #docker中并没有vim命令 所以可以选择安装vim apt-get update apt-get install -y vim #安装完后可以进行修改 |
(2)也可以使用命令进行修改
1 | docker exec myMysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf" |
1 | docker exec myMysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf" |
(3)因为进行了目录挂载所以也可以直接在宿主机上修改
然后重启mysql
1 | docker restart myMysql |
检查binlog功能是否有开启
1 2 3 4 5 6 7 | mysql> show variables like 'log_bin' ; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set ( 0.00 sec) |
log_bin是ON则代表开启了。
2.在linux中安装canal服务并启动
下载地址:
https://github.com/alibaba/canal/releases
(1)下载之后,放到目录中,先创建好目录,目录任意,linux中要有Java环境
1 | mv 安装包 /usr/local/canal/ |
然后解压
1 | tar -zvxf 安装包 |
(2)修改配置文件
1 | vi conf/example/instance.properties |
1 2 3 4 5 6 7 8 9 10 11 | #需要改成自己的数据库信息(linux中mysql的ip和端口) canal.instance.master.address= 192.168 . 44.132 : 3306 #需要改成自己的数据库用户名与密码 该用户必须有权限来跨系统连接 #可以通过windows中数据库连接工具进行测试,连上就代表有权限 canal.instance.dbUsername=canal canal.instance.dbPassword=canal #需要改成同步的数据库表规则,例如只是同步一下表 #canal.instance.filter.regex=.*\\..* canal.instance.filter.regex=guli_ucenter.ucenter_member |
若没有权限,则给用户赋予权限
1 2 3 | CREATE USER 'canal' @ '%' IDENTIFIED BY 'canal' ; GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal' @ '%' ; FLUSH PRIVILEGES; |
注意:
1 2 3 4 5 6 7 8 9 | mysql 数据解析关注的表,Perl正则表达式. 多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\) 常见例子: 1 . 所有表:.* or .*\\..* 2 . canal schema下所有表: canal\\..* 3 . canal下的以canal打头的表:canal\\.canal.* 4 . canal schema下的一张表:canal.test1 5 . 多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔) 注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤) |
(3)进入bin目录下启动
1 2 | cd bin sh startup.sh |
(4)关闭服务
1 | ./stop.sh |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义