1.Cannal的工作原理
①cannal模拟MySQL slave的交互协议,伪装自己为MySQL slave,向MySQL master发送dump协议
②MySQL mater收到dump请求,开始推送binary log给slave(即canal)
③canal解析binary log对象
2、Canal搭建环境
1、准备好MySQL运行环境;
2、开启 MySQL的binlog写入功能,配置 binlog-format 为 ROW 模式,my.cnf中配置如下:
[mysqld]
log-bin=mysql-bin #开启 binlog
binlog-format=ROW #选择 ROW 模式
server_id=1 #配置MySQL replaction需要定义,不要和canal的 slaveId重复
3、授权canal连接MySQL账号具有作为MySQL slave的权限, 如果已有账户可直接 grant授权:
启动MySQL服务器;
登录mysql:./mysql -uroot -p -h127.0.0.1 -P3306
CREATE USER canal IDENTIFIED BY ‘canal’;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’;
FLUSH PRIVILEGES;
4、下载 canal部署程序
Wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar -zxvf canal.deployer-1.1.4.tar.gz -C /usr/local/canal.deployer-1.1.4
5、配置修改
vim conf/example/instance.properties
主要是修改配置文件中与自己的数据库配置相关的信息;
6、启动Canal
./startup.sh
7、查看进程:
ps -ef | grep canal
8、查看 server 日志
cat logs/canal/canal.log
9、查看 instance 的日志
vi logs/example/example.log
10、关闭Canal
./stop.sh
canal server的默认端口号为:11111,如果需要调整的话,可以去到\conf目录底下的canal.properties文件中进行修改;
相关命令:
#是否启用了日志
show variables like ‘log_bin’;
#怎样知道当前的日志
show master status;
#查看mysql binlog模式
show variables like ‘binlog_format’;
#获取binlog文件列表
show binary logs;
#查看当前正在写入的binlog文件
show master status\G
#查看指定binlog文件的内容
show binlog events in ‘mysql-bin.000002’;
注意binlog日志格式要求为row格式;
Binlog的三种基本类型分别为:
ROW模式 除了记录sql语句之外,还会记录每个字段的变化情况,能够清楚的记录每行数据的变化历史,但是会占用较多的空间,需要使用mysqlbinlog工具进行查看;
STATEMENT模式只记录了sql语句,但是没有记录上下文信息,在进行数据恢复的时候可能会导致数据的丢失情况;
MIX模式比较灵活的记录,例如说当遇到了表结构变更的时候,就会记录为statement模式。当遇到了数据更新或者删除情况下就会变为row模式;
启动了canal的server之后,便是基于java的客户端搭建了;