基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步( 三 )

接下来做下面的操作:

  • 修改root用户的密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'QWqw12!@';(注意密码规则必须包含大小写字母、数字和特殊字符)
  • 更新root的host,切换数据库use mysql;,指定host为%以便可以让其他服务器远程访问UPDATE USER SET HOST = '%' WHERE USER = 'root';
  • 赋予'root'@'%'用户,所有权限,执行GRANT ALL PRIVILEGES ON . TO 'root'@'%';
  • 改变root'@'%用户的密码校验规则以便可以使用Navicat等工具访问:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'QWqw12!@';

基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

文章插图
 
操作完成之后,就可以使用root用户远程访问此虚拟机上的MySQL服务 。最后确认是否开启了binlog(注意一点是MySQL8.x默认开启binlog)SHOW VARIABLES LIKE '%bin%';:
基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

文章插图
 
最后在MySQL的Shell执行下面的命令,新建一个用户名canal密码为QWqw12!@的新用户,赋予REPLICATION SLAVE和 REPLICATION CLIENT权限:
CREATE USER canal IDENTIFIED BY 'QWqw12!@';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';FLUSH PRIVILEGES;ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'QWqw12!@';切换回去root用户,创建一个数据库test:
CREATE DATABASE `test` CHARSET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;安装ZookeeperCanal和Kafka集群都依赖于Zookeeper做服务协调,为了方便管理,一般会独立部署Zookeeper服务或者Zookeeper集群 。笔者这里选用2020-03-04发布的3.6.0版本:
midkr /data/zk# 创建数据目录midkr /data/zk/datacd /data/zkwget http://mirror.bit.edu.cn/Apache/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gztar -zxvf apache-zookeeper-3.6.0-bin.tar.gzcd apache-zookeeper-3.6.0-bin/confcp zoo_sample.cfg zoo.cfg && vim zoo.cfg把zoo.cfg文件中的dataDir设置为/data/zk/data,然后启动Zookeeper:
[root@localhost conf]# sh /data/zk/apache-zookeeper-3.6.0-bin/bin/zkServer.sh start/usr/bin/JAVAZooKeeper JMX enabled by defaultUsing config: /data/zk/apache-zookeeper-3.6.0-bin/bin/../conf/zoo.cfgStarting zookeeper ... STARTED这里注意一点,要启动此版本的Zookeeper服务必须本地安装好JDK8+,这一点需要自行处理 。启动的默认端口是2181,启动成功后的日志如下:
基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

文章插图
 
安装KafkaKafka是一个高性能分布式消息队列中间件,它的部署依赖于Zookeeper 。笔者在此选用2.4.0并且Scala版本为2.13的安装包:
mkdir /data/kafkamkdir /data/kafka/datawget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgztar -zxvf kafka_2.13-2.4.0.tgz由于解压后/data/kafka/kafka_2.13-2.4.0/config/server.properties配置中对应的zookeeper.connect=localhost:2181已经符合需要,不必修改,需要修改日志文件的目录log.dirs为/data/kafka/data 。然后启动Kafka服务:
sh /data/kafka/kafka_2.13-2.4.0/bin/kafka-server-start.sh /data/kafka/kafka_2.13-2.4.0/config/server.properties
基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

文章插图
 
这样启动一旦退出控制台就会结束Kafka进程,可以添加-daemon参数用于控制Kafka进程后台不挂断运行 。
sh /data/kafka/kafka_2.13-2.4.0/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-2.4.0/config/server.properties安装和使用Canal终于到了主角登场,这里选用Canal的v1.1.4稳定发布版,只需要下载deployer模块:
mkdir /data/canalcd /data/canal# 这里注意一点,Github在国内被墙,下载速度极慢,可以先用其他下载工具下载完再上传到服务器中wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gztar -zxvf canal.deployer-1.1.4.tar.gz解压后的目录如下:
- bin   # 运维脚本- conf  # 配置文件  canal_local.properties  # canal本地配置,一般不需要动  canal.properties        # canal服务配置  logback.xml             # logback日志配置  metrics                 # 度量统计配置  spring                  # spring-实例配置,主要和binlog位置计算、一些策略配置相关,可以在canal.properties选用其中的任意一个配置文件  example                 # 实例配置文件夹,一般认为单个数据库对应一个独立的实例配置文件夹    instance.properties   # 实例配置,一般指单个数据库的配置- lib   # 服务依赖包- logs  # 日志文件输出目录


推荐阅读