技术分享1:canal原理及安装、使用

最近leader建议小组内每个成员选一个主题,一个月分享一次新技术的学习成果。于是就有了这篇文章的诞生。0、canal原理1.canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议;2.mysql master收到dump请求,开始推送binary log给slave(也就是canal);3.canal解析...
摘要由CSDN通过智能技术生成

最近leader建议小组内每个成员选一个主题,一个月分享一次新技术的学习成果。于是就有了这篇文章的诞生。

 

0、canal原理

1.canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议;

2.mysql master收到dump请求,开始推送binary log给slave(也就是canal);

3.canal解析binary log对象(原始为byte流)

 

如下图:

 

参考:https://github.com/alibaba/canal/wiki/canal%E4%BB%8B%E7%BB%8D

 

具体:

    1、mysql master节点将改变记录保存到二进制binlog文件中。

    2、canal 把自己伪装成mysql slave节点,向master节点发送dump binlog请求。master节点收到请求并找到对应binlog文件及binlog位置pos。

    3、master根据pos读取binlog event,不断发往slave节点(也就是canal)。

    4、slave节点收到binlog events并拷贝到slave的中继日志。

    5、slave结点回放中继日志中的event并同步。

    6、新的binlog被master不断广播到slave节点,slave节点源源不断解析同步。

一、准备

1.MySQL 安装(指定版本)

Centos :  yum install -y mysql-community-server

 

2.MySQL 相关命令

# 服务开启service mysql start

 

# 服务关闭service mysql stop

 

# 登录mysql -uxxx -p (xxx 为账号, yyy为密码)

 

3.MySQL 对应目录

数据库目录:/var/lib/mysql(我机器的目录是这个)

配置文件: /usr/share/mysql , /etc/mysql

相关命令: /usr/bin , /usr/sbin

启动脚本: etc/init.d/mysql

 

二、配置MySQL

1.在/var/lib/mysql/my.cnf 中添加

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row.

[mysqld] 

log-bin=mysql-bin # binlog的文件名,也可以指定输出目录,默认/var/lib/mysql目录下

binlog-format=ROW # binlog格式,Mixed/Statement/Row,默认是Statement

server_id=1 # master的id,全局唯一。配置mysql replaction需要定义,不能和canal的slaveId重复 

 

数据库重启后, 简单测试 my.cnf 配置是否生效:

mysql> show variables like 'binlog_format';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | ROW   |

+---------------+-------+

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

 

2.在mysql中配置canal数据库管理用户,配置相应权限

canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限

#创建’canal’用户:

create user canal identified by 'canal';(网上大部分资料是这样的,但是我实践过后,启动canal失败。正确的是下面这个)

create user canal@localhost identified by 'canal'; #创建用户canal密码也是canal

(第一个’canal’是用户名,第二个’canal’是密码)

 

#授权部分需要的权限:

grant select, replication slave, replication client on *.* to 'canal'@'%';  (网上大部分资料是这样的,但是我实践过后,启动canal失败。正确的是下面这个)

grant select, replication slave, replication client on *.*  to 'canal'@'localhost';

 

#刷新权限列表:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值