会用到的命令:
show variables like 'log_bin'
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
show master status ;
show slave status
select * from mysql.user
canal同步mysql数据:
复制原理如何工作,整体上来说,复制有3个步骤:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events复制到它的中继日志(relay log)中;
(3) slave读取中继日志中的事件,将其重放到备库数据之上。
canal就是模仿的slave实现的!
采用canal工具进行mysql数据同步方案:
一. mysql开启Binlog功能
查看是否开启
show variables like 'log_bin'
ON是开启,OFF是关闭
修改my.cnf. Mac默认没有这个文件, /etc目录下
# log_bin
log-bin = mysql-bin #开启binlog
binlog-format = ROW #选择row模式
server_id = 1 #配置mysql replication需要定义,不能和canal的slaveId重复
重启mysql
再次查询是否开启binlog
创建远程访问用户,并授权访问(mysql中之行)
create user 'canal'@'%'IDENTIFIED BY 'canal'
grant all on *.* to 'canal'@'%'
flush privileges;
# ‘canal’ ‘canal’是canal的example/instances.properties 的dbUsername和dbPassword
二. 下载 canal官网:https://github.com/alibaba/canal/releases
配置
conf/example/instance.properties
canal.instance.mysql.slaveId=1234
# position info
canal.instance.master.address=localhost:3306
# 自己数据库的用户密码
canal.instance.dbUsername=canal
canal.instance.dbPassword= canal
主要配置这四部分,保证连接到mysql
启动
cd /Users/jkwanga/go/src/canal/bin
./startup.sh
查看日志
tail -f /logs/example/example.log
遇到错误:
报错 dump address /127.0.0.1:3306 has an error
报错:验证失败!账户授权的问题!
很久才找到的解决参考:
https://weikeqin.com/2018/05/16/canal-notes/
此刻已经正常运行了!