公司的归档库正式提出要搭建了,于是纪录搭建归档库的方案和过程。
需要备份的库是生产Oracle主库,由于没有归档机制,公司经过8年时间的运行,对于多个表的数据查询已经累积到十亿级别,查询效率已经很低下了,鉴于数据库的IO压力,我提出了建立归档机制,把长时间不经常使用的数据转移到独立的数据库,保证生产的高效率。
归档方案是吧两年前的数据转移到归档库上,每天定时执行一次。
归档库的设计有多种选择,MySQL/Oracle或者其他数据库都可以,由于公司要求,暂定先转移到一个新的Oracle库。
之后需要确定同步方案了,如果只是Oracle-Oracle有很多中方式,或者官方自带的同步工具也很好用,当前公司采用的MySQL-Oracle同步方案用的kafuka然后再由程序去执行。鉴于后期可能会涉及多种数据同步计划,如同步到BI数据仓库、MySQL数据库等等,经调研,选择使用阿里的datax同步方案。
datax介绍在git上有官方说明,淘宝用这个工具已经使用6年以上,稳定和可靠性有一定保障,详细介绍我就不说明了,对于我采用它的最大原因是:datax像是一个中间抽取工具,可以对不同类型数据库进行读操作和写操作。
这点非常重要,因为后期可能会有Oracle转移到MySQL、Elasticsearch,所以最终没有选择其他工具。
确定了数据同步方案后,需要确定具体执行环境,是直接拿服务器跑还是在服务器docker上跑呢,公司服务器数量不多且资源紧张,datax可能还会被作为一个通用服务,最后决定用docker跑datax。
总结具体步骤(之后部分详解):
1、安装Oracle新库(我是在centos7上静默安装的,不需要图形界面)
2、下载docker、datax、jdk8、maven3并且通过dockerfile构建datax及其相关运行环境(先会纪录手动构建jdk、maven,之后再执行dockerfile构建)
3、配置datax的Jason文件,试运行datax
本次纪录不描述Oracle静默安装过程,默认已经安装好了数据库。
接下来直接纪录docker安装并配置datax运行环境:
datax运行环境需要jdk、maven、python。鉴于需要多个服务,我就选择直接拉了个docker的centos7镜像作为基础镜像进行安装。
docker安装可参考之前的文章,这里不做纪录。
docker pull 一个centos镜像
docker run centos镜像
到这里我们就启动了一个centos的容器
查看
[root@service ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f8007dc5c00e centos7 "/bin/bash" 7 hours ago Up 3 hours silly_lamarr
进入容器:
[root@service ~]# docker attach f8007dc5c00e
[root@f8007dc5c00e bin]#
由于我pull的是centos7镜像,所以容器自带python,查看:
[root@f8007dc5c00e bin]# python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/lib64/python2.7/site.pyc matches /usr/lib64/python2.7/site.py
import site # precompiled from /usr/lib64/python2.7/site.pyc
# /usr/lib64/python2.7/os.pyc matches /usr/lib64/python2.7/os.py
......
版本是2.7,够用了,不需要升级到3.5
接下来退出容器,去网上下载jdk8和maven3并上传到服务器
[root@service data]# cd pkage/
[root@service pkage]# ls
apache-maven-3.6.0-bin.tar.gz datax.tar.gz jdk-8u191-linux-x64.tar.gz
这是我传到宿主机的三个包
接下来通过命令拷贝到centos7容器内部
[root@service pkage]# docker cp /data/pkage f8007dc5c00e:/data
这里用cp命令就能把文件拷贝进容器或者拷贝出来,只需要后面的目录调换就行了,
前面是当前地址,后面是目标地址,容器目录需要前面带容器名称或者容器ID才能接目录
进入容器,并且查看文件、解压:
[root@service pkage]# docker attach f8007dc5c00e
[root@f8007dc5c00e bin]# cd /data/pkage/
[root@f8007dc5c00e pkage]# ls
apache-maven-3.6.0-bin.tar.gz datax datax.tar.gz jdk jdk-8u191-linux-x64.tar.gz maven
我把解压文件夹重名了了一下,否则太长了操作麻烦,也可以不重名了。
这里,几个包解压后就算安装好了,但是需要添加环境变量才能让其全局生效,方法:
vi /etc/profile
#最后添加如下配置
#jdk变量
export JAVA_HOME=/data/pkage/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#maven变量
export MAVEN_HOME=/data/pkage/maven
export PATH=${PATH}:${MAVEN_HOME}/bin
注意环境变量的变量路径要和自己主机上存放路径一致,不是和我的一致。
source /etc/profile 使其立即生效
检查是否生效:
[root@f8007dc5c00e pkage]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
这里我们就把环境变量和docker服务已经手动部署完了,之后会进行datax测试。