概述
canal是众所周知的阿里监听解析mysql的binlog的工具,由于在本机使用时不方便直接运行,所以使用docker来部署mysql+canal,也可以加上canal-admin,下面直接展示:
部署mysql
本来mysql在容器启动时可以添加参数配置log-bin和binlog-format但无法配置server_id导致容器无法启动,所以使用默认配置启动容器再进入容器修改配置方式
这里可以不映射相关路径,根据需求决定
//创建一个容器内网络
docker network create my_network
//构建mysql
docker run --name mysql-es --net my_network -v /youdir:/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32
然后需要进入docker内部修改配置文件,之所以没有使用映射配置文件路径,因为配置映射后可能导致默认配置文件丢失情况,正式使用时也可以重新打包mysql,不用每次都进去修改。
//进入docker中
docker exec -it mysql-es /bin/bash
//修改相关配置
cd /etc/mysql/mysql.conf.d/
echo 'log-bin=mysqlbin'>> mysqld.cnf
echo 'server_id=1' >> mysqld.cnf
echo 'binlog-format=ROW'>> mysqld.cnf
exit
//重启该容器
docker restart mysql-es
在任意客户端连接该mysql执行
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
启动canal
这里分为使用canal-admin和不适用两种部署方式
1.使用canal-admin
先启动canal-admin,这里没有让canal-admin再接入mysql所以未对其加入mysql参数配置docker run --name mycanal-admin --net my_network --link mycanal:mycanal -e server.port=8089 -e canal.adminUser=admin -e canal.adminPasswd=admin --link mysql-es:db -p 8089:8089 -d canal/canal-admin:v1.1.4
再启动canaldocker run --name mycanal --net my_network -e canal.auto.scan=false -e canal.destinations=test -e canal.instance.master.address=db: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.admin.manager=mycanal-admin:8089 -e canal.admin.port=11110 -e canal.admin.user=admin -e canal.admin.passwd=4ACFE3202A5FF5CF467898FC58AAB1D615029441 -p 11112:11112 -p 11111:11111 -p 11110:11110 --link mysql-es:db -d canal/canal-server:v1.1.4
这里canal.admin.passwd参数,由于canal.admin设置密码是admin,所有要使用mysql执行select password(‘admin’)查看对应的加密后的值填入
之所以先启动admin再启动canal-server,因为如果canal-server配置中有admin相关参数,而在启动时无法连接到admin会导致启动失败。
至此浏览器登录localhost:8089,用户名:admin,密码:123456
可以看到正常显示
另外在canal-server启动时已经加入canal.destinations该参数相关配置,所以若是启动正常,可以直接在canal-admin管理界面看到一个正常启动的instance,若是没有看到,有可能提示instance配置文件不存在,此时直接在管理界面,手动添加一个instance,名称为创建容器时canal.destinations的参数赋值的名称即可
2.不使用canal-admin方式
因为canal-admin占用内存不小,在同时开启多个容器,比如es+mysql+canal+kibana+canal-admin,在本机往往撑不住,此时就放弃canal-admin,直接启动canal:docker run --name sicanal --net my_network -e canal.auto.scan=false -e canal.destinations=test -e canal.instance.master.address=db: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 -p 11112:11112 -p 11111:11111 -p 11110:11110 --link mysql-es:db -d canal/canal-server:v1.1.4
至于相关日志和相关参数调整可以进入容器内部自行调整和查看。
到此已经完成完成搭建部分的基础逻辑,后续客户端执行调用可参照官方文档根据自身语言进行后续编写
最后说下这只是本机测试和开发时可以用的一个实现方式,正式环境还要考虑容器内部文件存储映射,内存管理等等因素
本作品采用《CC 协议》,转载必须注明作者和本文链接
最后
以上就是大胆寒风为你收集整理的canal mysql 实例_docker中搭建canal监听mysql例子的全部内容,希望文章能够帮你解决canal mysql 实例_docker中搭建canal监听mysql例子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复