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   So怪咖  阅读(169)  评论(1编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示