本文为学习笔记
来自蚂蚁课堂
链接:http://www.mayikt.com/
基本概念
项目地址
简介
- canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费
- 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务。
MySQL 和 Redis 能否保障强一致性?
- 只要是微服务,很难保证强一致性问题,都是最终一致性
增量和全量的区别?
- 增量是实时的操作,对 MySQL 增删改行为进行订阅与消费
- 全量是在指定时间进行同步,将所有数据统一同步
MySQL主备复制原理
- MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看)
- MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log)
- MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
主从复制的作用
- 对数据实现备份
- 实现读写分离
- 实现故障转移
- 集群
canal 工作原理
- canal会启动一个 Server 端 作为 MySQL 从节点拉取主节点最新的binary log 文件
- MySQL 主节点 binary log 文件一旦发生改变都会以增量的形式通知给canalServer 端
- canalServer 将接收到的文件发送 canalClient 端 手动配置刷新同步
使用
1.配置MySQL配置
- 开启允许基于binlog文件主从同步
- windows 下配置文件为 my.ini
- linux 下配置文件为 my.cnf
vi /etc/my.cnf
- 增加 log-bin 订阅
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
- 配置该文件后,重启mysql服务器即可
#个人安装路径
cd /usr/local/mysql/bin
#重启 MySQL 服务
service mysql restart
检查是否开启log_bin 命令(ON 开启)
./mysql -u root -p #输入密码
show variables like 'log_bin';
image.png
退出
\q
构建CanalService 端
项目下载地址
image.png- 上传至 Linux /usr/local 目录下
- 修改、配置文件配置
/usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/example/instance.properties
- 这里是测试用的 root账户,如若正式环境最好单独创建账号
- Canal 整合 RocketMQ
#数据库连接地址
canal.instance.master.address=127.0.0.1:3306
#数据库连账号
canal.instance.dbUsername=root
#数据库连接密码
canal.instance.dbPassword=root
整合 RocketMQ
- RocketMQ相关内容
- 修改 instance.properties 配置文件配置
/usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/example/instance.properties
#设置 mq 连接
canal.mq.topic=mysql-redis-topic
- 修改 canal.properties
/usr/local/canal.deployer-1.1.5-SNAPSHOT/conf/canal.properties
#修改模式
canal.serverMode = rocketMQ
#修改 RocketMQ 服务地址
rocketmq.namesrv.addr = 127.0.0.1:9876
启动
- 进入 bin 目录
cd /usr/local/canal.deployer-1.1.5-SNAPSHOT/bin
- 在 Linux 运行
./startup.sh
- 在 Windows 下双击 startup.bat
- 查看 /usr/local/canal.adapter-1.1.5-SNAPSHOT/logs/adapter/adapter.log
停止运行
cd /usr/local/canal.deployer-1.1.5-SNAPSHOT/bin
./stop.sh
网友评论