数据同步:教你如何实时把数据从 MySQL 同步到 OceanBase OceanBase

2022-02-22 00:00:00 数据 增量 配置 日志 同步
作者简介:海芊,一个对技术充满热情的文档工程师。
个人频道:Amber Loves OB

背景介绍

我们都知道,很多用户并不是一开始就是使用 OceanBase 的。所以在他们决定使用 OceanBase 的时候,一定要把之前的业务数据迁移到 OceanBase 上来。如果是全量数据迁移,可以借助离线数据同步工具 DataX 。但是,如果在全量迁移过程中业务产生了新数据,这些新数据又如何迁移呢?此时就需要对数据进行增量迁移。这也是本文的主题:如果使用数据同步工具 Canal 实时把数据从 MySQL 同步到 OceanBase 。

【特别说明】这个教程使用的都是单机部署,只能用来演示。生产环境多为分布式集群部署。Canal 的部署也是支持集群的,需要配合 ZooKeeper 进行集群管理。

P.S. 配合视频教程一起食用效果更佳噢~~视频教程,点击 OceanBase 监控工具 OceanBaseAgent 。

Canal 介绍

那么什么是 Canal 呢?官方给出的解释, Canal 是个数据同步工具,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。基于日志增量订阅和消费,Canal 有以下功能:

  • 数据库镜像
  • 数据库实时备份
  • 索引构建和实时维护(拆分异构索引、倒排索引等)
  • 业务 cache 刷新
  • 带业务逻辑的增量数据处理

忽略官方的解释,通俗来说, Canal 就是一个数据同步工具。它能让 MySQL 和 OceanBase 建立联系,你在 MySQL 上进行的 DDL 、DML 操作,都能同步到 OceanBase 上。当然前提是 SQL 是两个数据库都支持的语法。

Canal 工作原理



MySQL master 将数据变更写入二进制日志( binary log , 其中记录叫做二进制日志事件 binary log events ,可以通过 show binlog events 进行查看)

  • MySQL slave 将 master 的 binary log events 拷贝到它的中继日志( relay log )
  • MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据
  • canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
  • MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
  • canal 解析 binary log 对象(原始为 byte 流)

以上内容部分摘自 Canal 官方 GitHub 仓库,更多信息,查看 Canal GitHub 仓库 。

操作步骤

从 MySQL 增量同步数据到 OceanBase 总共分 3 步:

  • 第 1 步,设置 MySQL
  • 第 2 步,部署 Canal
  • 第 3 步,写一些数据,测试实时同步功能

接下来我们按照上述步骤,来一起试一把数据同步。

第 1 步:设置 MySQL

MySQL 的安装本文就不介绍了,比较简单,网上也有很多教程。对于自建 MySQL ,需要先开启 Binlog 写入功能,打开 my.cnf 配置文件:

# 打开配置文件
vim /etc/my.cnf

相关文章