oracle mysql数据库备份脚本

用/bin/sh写了一个支持mysql和oracle按用户备份的脚本database_backup.sh,做个记录:

#############################################################################################
## Usage: 
## 1、mysql数据库,user1、user2、user3是数据库用户名
## database_backup.sh mysql 'user1 user2 user3'
## 2、oracle数据库,expdp方式,15为并行度
## database_backup.sh oracle 'user1,user2,user3' expdp 15
## 3、oracle数据库,exp方式
## database_backup.sh oracle 'user1,user2,user3' exp
#############################################################################################

#!/bin/sh

#环境变量--针对Oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4
export ORACLE_SID=mydb
export ORACLE_BASE=/u01/app/oracle
export DUMPDIR=DATABASE_BACKUP_DIR  ####此处默认 DATABASE_BACK_DIR 在数据库中的路径与${BACKUP_DIR}相同
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK


#环境变量--针对MySql
export USER=root                         #mysql的用户
export PASSWORD="123456"                 #mysql的用户密码
export HOSTNAME="localhost.localdomain"  #连接mysql的主机名,可以是IP





#程序变量
TIMESTMP=`date +"%Y%m%d_%H%M%S"` ##设置时间戳

#设置备份文件存放路径(可手动修改)
BACKUP_DIR=$HOME/backup_dir
if [ ! -d ${BACKUP_DIR} ];then     
    mkdir -p "${BACKUP_DIR}"  
fi
LOG_FILE=${BACKUP_DIR}/database_back.log


DATABASE_TYPE=$1
SCHEMAS=$2
EXPORT_TYPE=$3
PARALLEL=$4

echo " ">>${LOG_FILE} 2>&1
echo " ">>${LOG_FILE} 2>&1
echo "---------------------------程序开始------------------------------"   >>${LOG_FILE} 2>&1

if [ "$DATABASE_TYPE"x = "oracle"x ];then
{
if [ "$EXPORT_TYPE"x = "expdp"x ];then
    {
        echo "----`date +'%y-%m-%d %H:%M:%S'`--开始 oracle expdp 备份--------" >>${LOG_FILE} 2>&1
        #按用户导出
        $ORACLE_HOME/bin/expdp '"/ as sysdba"' directory=${DUMPDIR} dumpfile=backfile%U_${TIMESTMP}.dmp schemas=${SCHEMAS} NOLOGFILE=Y content=all compression=ALL parallel=${PARALLEL} cluster=N  >>${LOG_FILE} 2>&1
    }
    else
    {
        echo "----`date +'%y-%m-%d %H:%M:%S'`--开始 oracle exp 备份--------"   >>${LOG_FILE} 2>&1
        #按用户导出,非DBA用户只能导出本身用户,不能导出其他用户
        exp '"/ as sysdba"' file=$BACKUP_DIR/backfile_${TIMESTMP}.dmp OWNER=${SCHEMAS}  >>${LOG_FILE} 2>&1        
    }
fi
}

elif [ "$DATABASE_TYPE"x = "mysql"x ];then
{
    echo "----`date +'%y-%m-%d %H:%M:%S'`--开始 mysql 备份-----------------" >>${LOG_FILE} 2>&1    
    #使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件 
    mysqldump -h${HOSTNAME} -u${USER} -p${PASSWORD} --databases ${SCHEMAS} > ${BACKUP_DIR}/${DATABASE_TYPE}_${TIMESTMP}.dmp 2>&1

}
else
{
    echo "ERROR:database type is Unspecified!" >>${LOG_FILE} 2>&1
    exit
}
fi

echo "----`date +'%y-%m-%d %H:%M:%S'`--备份完成------------------------"   >>${LOG_FILE} 2>&1

cd $BACKUP_DIR 
if [ $? -eq 0 ]; then  
    tar czvf ${DATABASE_TYPE}_${TIMESTMP}.tgz *dmp >>${LOG_FILE} 2>&1
    echo “Backup Successful!”      >>${LOG_FILE} 2>&1
    rm -f *dmp *sql                >>${LOG_FILE} 2>&1
    
    #删除3天前的备份
        find $BACKUP_DIR  -mtime +3 -name "*.tgz" -print -exec rm {} \;  >>${LOG_FILE} 2>&1
else  
    echo “Database Backup Fail!”   >>${LOG_FILE} 2>&1
fi


echo "---------------------------程序结束------------------------------"   >>${LOG_FILE} 2>&1
echo "">>${LOG_FILE} 2>&1

 

posted on 2017-03-09 17:13  So怪咖  阅读(168)  评论(1编辑  收藏  举报

导航