微网站怎么自己做全媒体广告加盟
Canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。其基本原理是伪装成辅库把数据同步到其他数据库中。
基于日志增量订阅和消费的业务包括数据库镜像
数据库实时备份
索引构建和实时维护(拆分异构索引、倒排索引等)
业务 cache 刷新
带业务逻辑的增量数据处理
当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x
基本原理canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
canal 解析 binary log 对象(原始为 byte 流)
安装Canal Service
下载安装包并解压:wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
tar -zxvf canal.deployer-1.1.4.tar.gz
mv canal.deployer-1.1.4 /usr/local/canal
配置开放服务器端口:11110、11111、11112,如果canal仅在本机运行,可不开启
数据库配置
使用canal需要数据库开启binlogmysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
如果未开启,则需要配置[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
创建canal数据库用户,如果已存在用户有 SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限,此步可忽略,针对已有的账户可通过grants查询权限:show grants for 'canal'
创建账号CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
修改canal配置文件cd /usr/local/canal
vim conf/canal.properties
修改instance的名字,多个使用逗号分隔canal.destinations = example
修改数据库配置vim conf/example/instance.properties
此处example文件夹名字要与instance的名字对应canal.instance.master.address=127.0.0.1:3306 #数据库主库连接地址
canal.instance.dbUsername=canal #数据库用户名
canal.instance.dbPassword=canal #数据库密码
canal.instance.connectionCharset = UTF-8
#指定需要同步的数据库,支持仅同步指定表
canal.instance.filter.regex=testdb\\..*
#如果需要新增一个instance,只需要修改canal.properties文件,并新增一个instance配置即可,无需重启canal。
运行Canalsh bin/startup.sh
# 查看日志
cat logs/canal/canal.log
2020-08-20 19:45:13.592 [main] INFO com.alibaba.otter.canal.deployer.CanalStarter - ## start the canal server.
2020-08-20 19:45:13.629 [main] INFO com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[172.16.120.94(172.16.120.94):11111]
2020-08-20 19:45:14.889 [main] INFO com.alibaba.otter.canal.deployer.CanalStarter - ## the canal server is running now ......
2020-08-20 19:45:15.444 [canal-instance-scan-0] INFO com.alibaba.otter.canal.deployer.CanalController - auto notify start testdb successful.
instance的日志cat logs/example/example.log2020-08-20 19:40:01.574 [Thread-6] INFO c.a.otter.canal.instance.core.AbstractCanalInstance - stop CannalInstance for null-example
2020-08-20 19:40:01.602 [Thread-6] INFO c.a.otter.canal.instance.core.AbstractCanalInstance - stop successful....
关闭sh bin/stop.sh
重启sh bin/restart.sh
注意点
1、linux启动完成后,会在bin目录下生成canal.pid,stop.sh会读取canal.pid进行进程关闭
2、startup.sh默认读取系统环境变量中的which java获得JAVA执行路径,需要设置PATH=$JAVA_HOME/bin环境变量
3、重启canal要有kill进程的权限