由于某些原因(gui),很多企业都在进行去O的改造,去O是个漫长的过程,如何做到去O时的系统可用是大家头疼的问题,这个问题即数据异构的问题
下面给大家介绍几种我所了解到的方式,并着重描述我选择的方式:
停机维护
步骤很简单:
- 扩展应用程序,实现双写
- 编写全量脚本,按实际数据特点将不会变更的数据进行迁移
- 每天进行一次迁移,增量处理不会变更的数据
- 停机
- 实现所剩数据的增量同步
- 部署程序
之所以用双写,是因为很难做到针对某张表的全部修改,将查询语句留下来,不会对后续造成不可逆影响,但是双写带来的问题需要处理好
OOG
oracle官方工具,主流同步工具,亚秒级同步,继承了oracle的功能强大的特点,听起来是个完美的方案,唯一的缺陷就是收费
MySQL Migration Toolkit
mysql官方工具,支持的场景源多,可以自动创建DDL,开源免费,但是缺点太多,已经停止开发,同步时类型转换有问题,需要人工处理,只能在Windows上使用
KETTLE
开源免费,效率高,稳定,基于sql,灵活,新增数据源需要的修改少,但是基于sql,需要预设更新时间字段进行数据筛选,否则无法增量
DataX
阿里去O使用的一款平台,功能强大,插件式开发,满足更多自定义的需求,目前已经有企业级服务可以直接购买,我其实是更偏向这个插件的,但是他的mysql数据读是基于sql的,如果没有可控字段是无法处理增量同步逻辑的,所以很遗憾没有用这套方案,以后自己会注意开发规范,从自己做起
canal+otter
这是我选择的方式,该插件只专注于Mysql和Oracle的同步,而且是通过binlog的方式,可以在增量同步的同时对应用程序代码的影响达到0,而且自带的监控报警系统/UI配置界面和权限管理,对于普通需求可以达到0开发,如果有脱敏或者复杂需求,也提供了数据处理的自定义插件开发接口
讲一下我是怎么做的
安装canal
下载1
wget "https://github.com/alibaba/canal/releases/download/canal-1.1.3-alpha-2/canal.deployer-1.1.3-SNAPSHOT.tar.gz" --no-check-certificate
解压1
tar -zxvf canal.deployer-1.1.3-SNAPSHOT.tar.gz
配置文件修改1
vim /usr/local/canal/conf/example/instance.properties
1 | ################################################# |
安装otter
otter需要配合zk进行状态管理,zk安装不在此描述
manager(管理工具)
1 | wget "https://github.com/alibaba/otter/releases/download/otter-4.2.17/manager.deployer-4.2.17.tar.gz" --no-check-certificate |
解压1
2
3
4
5
6
7
8
9
10tar -zxvf manager.deployer-4.2.17.tar.gz
```
进入到conf文件配置好ip端口就可以通过bin下的startup.sh脚本进行运行了,但是要提前做好数据源配置
> 官方基础数据表
https://raw.githubusercontent.com/alibaba/otter/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql
###### node
下载
```text
wget "https://github.com/alibaba/otter/releases/download/otter-4.2.17/node.deployer-4.2.17.tar.gz" --no-check-certificate
解压1
tar -zxvf node.deployer-4.2.17.tar.gz
生成序列号1
echo 1 >node/conf/nid
配置和启用使用还是conf和bin文件夹下,只需要改数据源端口配置即可使用
Master配置
开启binlog配置1
2
3
4
5
6
7
8
9
10
11在my.inf文件中添加
log_bin=ON
log_bin_basename=/var/lib/mysql/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index
或者
log-bin=/var/lib/mysql/mysql-bin
然后重新启动
创建同步用户1
2
3
4
5
6
7
8-- 创建用于同步的用户
CREATE USER 'username' IDENTIFIED BY '123456';
-- 赋予同步用户SLAVE权限
GRANT REPLICATION SLAVE ON *.* TO 'username';
-- 给同步表查询权限
GRANT SELECT ON X.X TO 'username' IDENTITY BY '123456';
-- 给SLAVE状态查询权限
GRANT REPLICATION CLIENT ON *.* TO 'username';
Slave配置
使用日常使用的用户即可满足
管理界面配置
- 机器管理-配置ZK
- 机器管理-配置Node
- 配置数据表
- 配置数据源
- 配置Channel
- Channel下配置pipeline
- pipeline下配置任务
- 启动Channel