简介
canal 是阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,包括阿里、美团等都有广泛的应用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。
以下实现一个使用cannal监控Linux数据库,远程LInux的数据库数据发生变化,本地的windows相应的数据库也发生相应的变化
Linux中Cannal环境配置
查看MySQL是否开启log_bin
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
如果log_bin关闭,修改MySQL配置开启log_bin
1,修改 mysql 的配置文件 my.cnf
vi /etc/my.cnf
追加内容:
log-bin=mysql-bin #binlog文件名
binlog_format=ROW #选择row模式
server_id=1 #mysql实例id,不能和canal的slaveId重复
2,重启 mysql:
service mysql restart
3,登录 mysql 客户端,查看 log_bin 变量
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON|
+---------------+-------+
1 row in set (0.00 sec)
注意:如果自己使用的MySQL账户没有开启远程登录功能(例如root账户默认没有远程登录功能)是无法做到数据同步的,如果能够使用MySQL客户端工具账号密码远程连接Linux上的MySQL就说明该账户有远程登录功能,反之需要给创建一个能够远程登录MySQL的账号
创建一个具有远程登录功能的账号
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal'; GRANT SHOW VIEW, SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'canal'@'%'; FLUSH PRIVILEGES; //刷新权限
授予账号远程登录权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION FLUSH PRIVILEGES; //刷新权限
下载cannel,将cannell安装的Linux,修改cannal的配置文件,cannal解压后的目录结构如图所示
1. 解压文件
tar -zxvf canal.deployer-1.1.4.tar.gz -C cannal-1.1.4
2.解压后进入cannal的配置文件,修改配置文件
vi conf/example/instance.propertie