Canal简介
canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(本次使用5.6,5.7也兼容,8.0没有尝试,可以试试,如果不行就降版本).
canal 工作原理
- canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
- MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
- canal 解析 binary log 对象(原始为 byte 流)
Docker安装
Docker安装可以参照官网
https://docs.docker.com/engine/install/centos/
设置镜像仓库可以使用阿里云镜像
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Mysql安装(Docker)
注意:Docker在更换版本的时候要把挂载在外面的文件删除不然有可能启动不了
安装其他版本自己改后面的就行
建议去docker hub中搜索
https://hub.docker.com/
docker pull mysql:5.6
安装完后开启容器
#将容器内的/etc/mysql/conf.d挂载到本地/home/mysql/conf路径
/home/mysql/conf:/etc/mysql/conf.d
下一个-v 也同样的道理 data一定要挂载出来不然容器删了数据库就没了(删库跑路)
#你的数据库密码 账号默认root
-e MYSQL_ROOT_PASSWORD=
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6
Mysql配置
centos中进入mysql安装目录,找到my.cnf文件打开
#端口号
port = 3306
#开启mysql的binlog写入功能
log-bin=mysql-bin
#配置binlog模式为row
binlog_format=ROW
#不能和canal的slaveId重复
server_id=1
#配置同步的数据库名
binlog-do-db=newbuds
#忽略的数据库
binlog-ignore-db=
Docker配置Mysql
进入home/mysql/conf目录并创建my.cnf文件
在文件内编写上面配置即可
检查配置是否生效
Docker进入方式不一样
mysql是自己容器名不要搞错了
docker exec -it mysql /bin/bash
相同
root 为自己的账号
mysql -u root -p
输入密码进入mysql
检查配置
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
与上面相同就配置文件生效了
创建canal用户并授权限
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
到这里mysql安装和配置就完成了。接下来安装canal
安装canal
Linux安装Canal与配置
安装1.1.4其他版本自己选择就好了
https://github.com/alibaba/canal/releases/tag/canal-1.1.4
选择这个文件下载
下载之后压缩包传到Linux中我这里放在/usr/canal文件夹中
解压文件
tar -xzvf canal.deployer-1.1.4.tar.gz
文件内有两个配置文件
canal.properties这个不用修改
(我这里使用宝塔操作的用Linux一样的)
进入example目录
编辑这个文件
#数据库的IP和端口
#如果canal和mysql分开在不用的服务器就将127.0.0.1换成服务器的就好了
canal.instance.master.address=127.0.0.1:3306
#数据库名字
canal.instance.dbUsername=newbuds
#数据库密码
canal.instance.dbPassword=123456
使用 sh startup.sh 运行
这里可以查看日志,运行完后建议在这里查看下日志
Docker安装Canal与配置
拉取镜像
docker pull canal/canal-server
启动
docker run -p 11111:11111 --name canal -d canal/canal-server
之前试过将文件挂载出来,但是运行不了,配置文件直接找不到,所以就直接在容器内编辑了(在容器内编辑需要安装vim 后面会讲到)。
这样就是启动好了,会发现有四个端口,其实在这个镜像里面内置了许多其他的东西JDK1.8等,所以也就导致镜像比较大
[root@instance-v74dxgvu conf]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
53ff801dd0eb canal/canal-server "/alidata/bin/main.s…" 5 hours ago Up 5 hours 2222/tcp, 8000/tcp, 11112/tcp, 0.0.0.0:11111->11111/tcp canal
以下就是其他的内置东西
启动之后进入容器
docker exec -it canal /bin/bash
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200529201549316.png
到这里就和Linux上一样的了。
conf中放置了配置文件
logs中放置了日志文件
注意:在canal-server中没有vim命令需要自己安装
#更新源库
yum update
#安装vim
yum install vim
在docker中数据库的ip查看mysql的容器ip
使用127.0.0.1是连不通的
查看容器详细信息 mysql是容器名(或ID)
docker inspect mysql
完工
canal还可以配合其他组件一起使用,目前只用来同步redis.
明天把canal同步mysql和redis的代码放出来,目前还在调试中。
续集点下这里这里这里
续集点下这里这里这里
续集点下这里这里这里
有哪里出错了还希望可以指出来。o v o o v o o v o o v o