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
canal实现mysql跨机房备份的更多相关文章
- 转载:阿里canal实现mysql binlog日志解析同步redis
from: http://www.cnblogs.com/duanxz/p/5062833.html 背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数 ...
- canal —— 阿里巴巴mysql数据库binlog的增量订阅&消费组件
阿里巴巴mysql数据库binlog的增量订阅&消费组件canal ,转载自 https://github.com/alibaba/canal 最新更新 canal QQ讨论群已经建立,群号 ...
- 阿里巴巴开源项目: canal 基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增 量变更,不过从2010年开始,阿里系公司开始逐步的 ...
- Linux实战教学笔记48:openvpn架构实施方案(一)跨机房异地灾备
第一章VPN介绍 1.1 VPN概述 VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者 ...
- mysql全量备份与增量备份
mysql全量备份与增量备份 1.全量备份 全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -p456 -S /data/3306/mysql.sock ...
- Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费. 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求 ...
- 最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目
最近帮客户实施的基于SQL Server AlwaysOn跨机房切换项目 最近一个来自重庆的客户找到走起君,客户的业务是做移动互联网支付,是微信支付收单渠道合作伙伴,数据库里存储的是支付流水和交易流水 ...
- mysqldump常用于MySQL数据库逻辑备份
mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...
- mysql数据库的备份和还原的总结
mysql数据库的备份和还原的总结 (来自一运维同事的总结) 1. 备份方式: 热备:数据库在线进行备份,不影响读和写的在线备份方式! 温备:数据库在线进行备份,对表备份时先锁定写操作,仅可以执行读操 ...
- SQL Server 跨网段(跨机房)通过备份文件初始化复制
笔者最近碰到了需要搭建跨网段的SQL Server复制,实际的拓扑结构如下草图所示: 发布端A服务器位于CDC机房中 订阅端B服务器位于阿里云 因为SQL Server复制不支持通过IP连接分发服务器 ...
随机推荐
- js解析上传APK文件的详细信息
前端解析APK版本信息 需要安装这个包,可以使用cnpm或者npm npm 安装 app-info-parser ( 命令:npm install app-info-parser) APKInfo为i ...
- vim 从嫌弃到依赖(3)——vim 普通模式
在上一篇中,我们提到vim的几种模式,并且给出了一些基本的操作命令,包括移动光标,删除.替换操作.并且给出了几个重要的公式,理解这个公式对于理解vim和提高使用vim的效率来说至关重要.所以在这篇文章 ...
- C/C++ 实现FTP文件上传下载
FTP(文件传输协议)是一种用于在网络上传输文件的标准协议.它属于因特网标准化的协议族之一,为文件的上传.下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinI ...
- 28图图解Raft协议,so easy~~
大家好,我是三友~~ 在之前写的<万字+20张图探秘Nacos注册中心核心实现原理> 这篇文章中我留了一个彩蛋 当文章点赞量突破28个,就单独写一篇关于Raft协议的文章 既然现在文章点赞 ...
- iOS测试包的安装方法
iOS测试包根据要安装的机器类型可以分为2种: .app模拟器测试包 .ipa真机测试包 .app模拟器测试包的安装方式 方式一:Xcode生成安装包 1.Xcode运行项目,生成app包 2.将AP ...
- 模式识别实验:基于主成分分析(PCA)的人脸识别
前言 本文使用Python实现了PCA算法,并使用ORL人脸数据集进行了测试并输出特征脸,简单实现了人脸识别的功能. 1. 准备 ORL人脸数据集共包含40个不同人的400张图像,是在1992年4月至 ...
- go Printf 语句的占位符 Format
func main() { var a uint8 = 12 var b = "wokao" fmt.Printf("查看类型:%T\n", a) //查看类型 ...
- CF1895
A 题意:你在数轴原点.有一个宝箱在 \(x\),钥匙在 \(y\).每移动一单位,耗费 \(1\) 时间.你可以到了 \(x\) 然后抱着宝箱走,但是抱着宝箱走的总路程不能超过 \(k\) 单位.如 ...
- Socket.D 开源输传协议的集群转发特性
1.简介 Socket.D 是基于"事件"和"语义消息""流"的网络应用层协议.底层可以依赖 TCP.UDP.KCP.WebSocket 等 ...
- NC51189 Mondriaan's Dream
题目链接 题目 题目描述 Squares and rectangles fascinated the famous Dutch painter Piet Mondriaan. One night, a ...