写在前文
本文是我自己经过实践记录的,环境搭建简单快速,适合于前期学习(如果想深入了解Kafka、Redis、MySQL集群同步等相关知识本文不适用)。使用canal同步有两种方案,一种是使用canal原始的tcp方式,一种是使用canal+kafka类型;
Canal原理
Canal的服务端伪装成MySQL的从服务器,订阅MySQL的主服务器的binlog日志,实现增量同步数据,保持最终一致性。
1、搭建MySQL环境(Docker安装MySQL)
docker搭建MySQL可以参考其他文章。
配置:my.cnf文件
开启mysql的binlog同步文件,
# 方法一:
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
# 方法二:
docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker restart mysql
重启MySQL:docker restart mysql
如果没有开启binlog的话,我们在console中执行:show variables like 'log_bin';的值就是OFF(开启后就为ON)。
在MySQL中创建canal账号(可以直接用root,也可以创建一个新的账号)
执行创建用户我的SQL语句:
drop user 'canal'@'%';
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
grant all privileges on *.* to 'canal'@'%' identified by 'canal';
flush privileges;
注意:如果我们的权限不足的话,如下图。我们在执行程序的时候系统时连接不上MySQL的主节点的,会报权限不足。