canal实现mysql跨机房备份

背景介绍


跨机房数据库数据备份

数据库增量异构系统分发(cache,mq等)

数据内容聚合分析组件

摘录作者的描述

原理图

  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

环境说明


服务 ip 版本 端口 备注
mysql 10.159.37.179 5.6.1 3306 数据库主库
canal-server 10.199.96.148 1.1.3 11111 canal服务端binlog程序
zookeeper 10.199.96.148 3.4.14 2181 HA服务
zookeeperUI 10.199.96.148 1.0.0 2181 HA服务前端展示
canal-admin 10.199.96.148 1.1.4 8090 canal管理控制系统
file-beats 10.199.96.148 1.1.4 8090 canal日志文件读取服务
logbash 10.199.96.148 1.1.4 8090 canal日志搜集传输服务
elasticsearch 10.199.96.148 1.1.4 8090 搜索引擎
kabana 10.199.96.148 1.1.4 8090 搜索引擎前端展示

整体架构


  • canal-server集群部署,使用zookeeper作为ha组件,有server当机时客户端自动根据心跳切换到可用server上。
  • canal-server充当数据库slave角色,把binlog日志转换为结构化数据,canal-client连接server接收数据库变化日志,自行处理,本案例打印固定格式的日志:
2019-09-05 01:19:26.294|[INFO] [pool-6-thread-1] DBSQL_LOGGER [SimpleCanalClient.java : 68]|INSERT INTO intelligent-family.biz_device_message (id,user_id,biz_devices_id,tel,mac,message_name,message_type,message_val,message_aos,message_content,message_content_url,create_time) VALUES ('2961971',null,null,'13818424752','38D269B0677DFC9E2900','被拆报警,请您尽快处理!','infTamperAlarm','infTamperAlarm','0','您家于2019-09-05 01:19:25被拆报警,请您尽快处理!',null,'2019-09-05 01:19:25')
  • filebeats/logstash收集canal-client数据库变更日志,统一发送到搜索引擎elasticsearch中构建索引。
  • kabana通过http请求查询搜索引擎中日志索引展示数据库变更日志。

部署及配置


mysql

  • 当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48),ps. mysql4.x版本没有经过严格测试,理论上是可以兼容

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


[mysqld]  
log-bin=mysql-bin #添加这一行就ok  
binlog-format=ROW #选择row模式  
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

重启


service mysqld restart

数据库重启后, 简单测试 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    |
+---------------+-------+
  • canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限

CREATE USER canal IDENTIFIED BY 'canal';    
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;  
FLUSH PRIVILEGES; 
#针对已有的账户可通过grants查询权限
show grants for 'canal' 

canal-server

安装
配置
启动/停止

zookeeper & zkui

canal-admin

canal-client

依赖
代码
运行

A&Q&总结


参考


https://segmentfault.com/a/1190000020172570

https://github.com/alibaba/canal

zookeeper地址:http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

定位问题原因* 根据原因思考问题解决方案* 实践验证方案有效性* 提交验证结果
原文地址:https://www.cnblogs.com/jimoliunian/p/13026571.html