一、部署canal:
3.1开启MySQL的binlog功能,并配置binlog模式为row。
通过set global * = *, 立即生效,重启后重新读取配置文件my.cnf ,想永久生效记得修改配置文件
log-bin = mysql-bin
binlog-format=Row
server-id=1(和canal的slaveId不重复即可,canal默认1234,一般不用修改)
3.2在mysql中配置canal数据库管理用户,配置repication权限
创建mysql用户(一般的账号都有这个权限,注意一个实例下面有多个实例,
你的账号只有A库权限,你只能读取A库的binlog,要在配置中过滤,否则在消费日志中会出现异常)
CREATE USER canal IDENTIFIEDBY 'canal';
赋给用户查询,同步权限
GRANT SELECT,REPLICATIONSLAVE,REPLICATION CLIENT ON *.* TO 'canal'@'%';
刷新
FLUSH PRIVILEGES;
3.3下载canal并解压
下载canalhttps://github.com/alibaba/canal/releases
上传到192.168.100.57服务器上,解压到/home/canal中
3.4 修改配置文件
cd /home/conf 目录下
3.4.1 vi canal.properties 配置canal
更改以下两个地方(如果是集群模式需要把zookeeper配置进去)
canal.ip=
canal.port=
3.4.2 vi/example/instance.properties配置数据库(为什么是example,因为一个CANAL可以管理多个数据库,一个数据源一个文件夹(example随便取)一个instance.properties配置文件)
## mysqlserverId
canal.instance.mysql.slaveId= 1234
//修改为自己需要监控的数据库地址信息
canal.instance.master.address= //数据的ip和端口
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
//集群配置
#canal.instance.standby.address=
#canal.instance.standby.journal.name=
#canal.instance.standby.position=
#canal.instance.standby.timestamp=
//数据库的信息
canal.instance.dbUsername= //用户名
canal.instance.dbPassword= //密码
canal.instance.defaultDatabaseName= //默认的数据库名称
canal.instance.connectionCharset= //编码集
# tableregex
canal.instance.filter.regex= .*\\..*(这个配置可能不会生效,在client端进行过滤)
# tableblack regex
canal.instance.filter.black.regex=
3.5 启动canal
cd bin目录下执行./start.sh
执行 ls查看文件发现会产生canal.pid文件代表服务已启动
3.6 查看日志文件
cd logs 目录下
有两个文件夹一个是canal,一个是example。有关canal的错误会在canal文件夹下输出,有关数据库链接的错误会在example下输出
说明:
canal的HA
canal的HA高可用是在canal上集成zookeeper,用zookeeper来协调管理canal的节点,当一个canal节点宕掉之后,另一台节点会自动将任务接过来,在一台canal节点运行的时候,其余的canal节点是处于standby状态,随时待命。
client读取binlog ,参见canal官网,
https://github.com/alibaba/canal/wiki/ClientExample
注意
应该是<>,
遇到的问题,canal消费日志的速度是不是有点慢,binlog已经删除,还没消费完,造成日志定位错误;