1.canal原理
a)canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
b)mysql master收到dump请求,将binary log推送给canal
c)之后,canal解析binary log对象
2.canal的安装
a)使用docker拉取canal的镜像
docker pull canal/canal-server:latest
. b)建立canal容器
docker run -p 11111:11111 -d --name=canal canal/canal-server:latest
. c)进入canal容器,修改canal.properties 和instance.properties(通过SecureFX修改)
1)修改canal.properties
[root@localhost ~]# docker cp canal:/home/admin/canal-server/conf/canal.properties ./canal.properties #修改完毕 [root@localhost ~]# docker cp canal.properties canal:/home/admin/canal-server/conf/canal.properties
. 2)修改instance.properties
[root@localhost ~]# docker cp canal:/home/admin/canal-server/conf/example/instance.properties ./instance.properties #修改完毕 [root@localhost ~]# docker cp instance.properties canal:/home/admin/canal-server/conf/example/instance.properties
注意:canal.instance.filter.regex=.*\..* 表示监听mysql的所有的数据库
3.mysql配置
1)拉取mysql,并创建容器
docker run -d --name=mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 -p 代表端口映射,格式为 宿主机映射端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码 #进入mysql容器中 docker exec -it mysql /bin/bash 登录 mysql -u root -p #创建账号,并授予权限(账号名称,密码与之前instance.properties一致) create user canal@'%' IDENTIFIED by 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT,SUPER ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; #mysql容器 docker restart mysql
2)修改mysqld.cnf(通过SecureFX修改)
[root@localhost ~]# docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf mysqld.cnf #修改完毕 [root@localhost ~]# docker cp mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf
4.到这里,基本配置完成了.还需要注意的是在使用canal时要关闭linux的防火墙.我就是在这里出了问题,也可以开放3306,11111端口
firewall-cmd --zone=public --add-port=80/tcp --permanent #开放80端口 firewall-cmd --zone=public --remove-port=80/tcp -- permanent #关闭80端口 firewall-cmd --reload # 配置立即生效 firewall-cmd --list-ports 查看开启的所有端口



