严选品质
正规商家

Linux 系统自动备份 Oracle 数据库至阿里云 OSS Shell 脚本教程

之前发过一篇文章,Linux 自动备份 Oracle 数据库 Shell 脚本,在这里,稍微改良一下,备份好的文件,上传至阿里 OSS(对象存储) 中。

官方网站

点击直达阿里云官方网站

Linux 系统自动备份 Oracle 数据库至阿里云 OSS Shell 脚本教程

Linux 自动备份 Oracle 数据库 Shell 脚本

我们之前也介绍过,如何在 Linux 备份 MySQL 。 我是备份在本机,所以我采用 Oracle 自带的

这里主要是利用阿里 OSSUtil 命令行工具:工具详细描述。官网工具里面有很多详细的操作文档。

安装(Linux操作系统)

wget http://gosspublic.alicdn.com/ossutil/1.6.18/ossutil64 # 下载工具

chmod 755 ossutil64 # 文件可执行权限授权

配置

./ossutil64 config

1:请输入配置文件名,文件名可以带路径(默认为:/root/.ossutilconfig,回车将使用默认配置文件。如果用户设置为其它文件,在使用命令时需要将–config-file选项设置为该文件)

默认即可,我这里路径就是:/root/.ossutilconfig

2:请输入语言(CH/EN,默认为:CH,该配置项将在此次 config 命令成功结束后生效):

默认即可:CH

3:请输入endpoint:oss-cn-shenzhen-internal.aliyuncs.com

地域节点。在 Bucket 基础数据可以查看;
我这里使用的是 VPC 内网,是因为 ECS 服务器 跟 OSS 的 Bucket 都在同一个区域,否则需要使用外网:oss-cn-shenzhen.aliyuncs.com

4:请输入accessKeyID:LT***GK**N***Lhy****paZ7

具体创建教程可查看:创建 AccessKey

5:请输入accessKeySecret:e***4lM****QZBP****Xe***o138*

创建教程同上:创建 AccessKey

6:请输入stsToken:

非必配项,若采用STS临时授权方式访问OSS需要配置该项,否则置空即可。stsToken生成方式参见:临时访问凭证

查看配置文件

cat /root/.ossutilconfig

[Credentials]
language=CH
endpoint=oss-cn-shenzhen-internal.aliyuncs.com
accessKeyID=LT***GK**N***Lhy****paZ7
accessKeySecret=e***4lM****QZBP****Xe***o138*

配置完毕

测试上传文件(cp 命令):cp 命令用于上传、下载、拷贝文件。

单个文件上传:

./ossutil cp izpan.txt oss://bucketName/izpan.txt

递归文件夹上传:

./ossutil cp -r izpan/ oss://bucketName/izpan

文件下载:oss 目录与本地目录位置互换

./ossutil cp -r oss://bucketName/izpan.txt izpan/

bucketName 指的是您的 Bucket 名称

更多 cp 命令的用户可查看文档


Oracle Shell 脚本

以上是 OSSUtil 工具的简单使用说明。配合下我们的 Oracle 备份 Shell 脚本,完成自动备份并上传 OSS 的动作

#!/bin/sh
export ORACLE_BASE=/mnt/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export ORACLE_DIRECTORY=bakdir
# 备份目录
export DATA_DIR=/mnt/backup/bakdir
# 当前脚本目录(OSSUtil)
export SHELL_DIR=/mnt/backup/bakdir
# 删除备份时间 30 天
export DEL_TIME=`date -d "30 days ago" +%Y%m%d`
# 备份时间
export BAKUP_TIME=`date +%Y%m%d%H%M%S`
# 字符编码
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# 账号
export db_user="test"
# 密码
export db_password="123456"
# db schemas
export db_schemas="data_schemas"
# oss bucket name
export OSS_BUCKET_NAME="izpan-database-bak"

mkdir -p $DATA_DIR
echo "-- $(date +'%Y%m%d%H%M%S') 自动备份数据库并压缩开始 " >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 开始备份的文件名:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt;
echo "Bakup file path $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp"
  expdp $db_user/$db_password@$ORACLE_SID schemas=$db_schemas directory=$ORACLE_DIRECTORY dumpfile=${ORACLE_SID}_${BAKUP_TIME}.dmp logfile=${ORACLE_SID}_${BAKUP_TIME}.log
echo "-- $(date +'%Y%m%d%H%M%S') 备份成功:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 开始进行压缩:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp -> tar.gz" >> $DATA_DIR/BAK_LOG.txt;
  cd $DATA_DIR && tar -czvf ${ORACLE_SID}_${BAKUP_TIME}.tar.gz ${ORACLE_SID}_${BAKUP_TIME}.dmp ${ORACLE_SID}_${BAKUP_TIME}.log
echo "-- $(date +'%Y%m%d%H%M%S') 压缩成功:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz" >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 开始删除30天前备份记录文件:$DATA_DIR/${ORACLE_SID}_${DEL_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt;
  rm -rf $DATA_DIR/${ORACLE_SID}_${DEL_TIME}*
echo "-- $(date +'%Y%m%d%H%M%S') 删除30天前备份记录文件:$DATA_DIR/${ORACLE_SID}_${DEL_TIME}.dmp 结束" >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 开始删除当前备份记录文件:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp" >> $DATA_DIR/BAK_LOG.txt;
  rm -rf $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.log 
echo "-- $(date +'%Y%m%d%H%M%S') 删除当前备份记录文件$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.dmp 成功" >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 自动备份数据库并压缩完毕 " >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 自动上传压缩包至阿里 OSS 开始 " >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 开始上传当前备份记录文件:$DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz " >> $DATA_DIR/BAK_LOG.txt;
  cd $SHELL_DIR && ./ossutil64 cp $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz oss://${OSS_BUCKET_NAME}/${ORACLE_SID}_${BAKUP_TIME}.tar.gz
  rm -rf $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz
echo "-- $(date +'%Y%m%d%H%M%S') 上传当前备份记录文件 $DATA_DIR/${ORACLE_SID}_${BAKUP_TIME}.tar.gz 成功" >> $DATA_DIR/BAK_LOG.txt;
echo "------------------------------------------------------------------" >> $DATA_DIR/BAK_LOG.txt;
echo "-- $(date +'%Y%m%d%H%M%S') 自动上传压缩包至阿里 OSS 结束 " >> $DATA_DIR/BAK_LOG.txt;
echo " " >> $DATA_DIR/BAK_LOG.txt;
echo " " >> $DATA_DIR/BAK_LOG.txt;

脚本输出

-- 20200730122522 自动备份数据库并压缩开始
------------------------------------------------------------------
-- 20200730122522 开始备份的文件名:/mnt/backup/bakdir/orcl_20200730122522.dmp
-- 20200730122528 备份成功:/mnt/backup/bakdir/orcl_20200730122522.dmp
------------------------------------------------------------------
-- 20200730122528 开始进行压缩:/mnt/backup/bakdir/orcl_20200730122522.dmp -> tar.gz
-- 20200730122528 压缩成功:/mnt/backup/bakdir/orcl_20200730122522.tar.gz
------------------------------------------------------------------
-- 20200730122528 开始删除30天前备份记录文件:/mnt/backup/bakdir/orcl_20200630.dmp
-- 20200730122528 删除30天前备份记录文件:/mnt/backup/bakdir/orcl_20200630.dmp 结束
------------------------------------------------------------------
-- 20200730122528 开始删除当前备份记录文件:/mnt/backup/bakdir/orcl_20200730122522.dmp
-- 20200730122528 删除当前备份记录文件/mnt/backup/bakdir/orcl_20200730122522.dmp 成功
------------------------------------------------------------------
-- 20200730122528 自动备份数据库并压缩完毕
------------------------------------------------------------------
-- 20200730122528 自动上传压缩包至阿里 OSS 开始
------------------------------------------------------------------
-- 20200730122528 开始上传当前备份记录文件:/mnt/backup/bakdir/orcl_20200730122522.tar.gz
-- 20200730122528 上传当前备份记录文件 /mnt/backup/bakdir/orcl_20200730122522.tar.gz 成功
------------------------------------------------------------------
-- 20200730122528 自动上传压缩包至阿里 OSS 结束

强烈建议:如有需放置生产环境,请在放置前,请自行测试是否可用,如造成文件丢失的,后果自负。

赞(0)
未经允许不得转载:主机推广 » Linux 系统自动备份 Oracle 数据库至阿里云 OSS Shell 脚本教程