#############################################################################################
## 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.4export 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_dirif [ ! -d ${BACKUP_DIR} ];then
mkdir -p "${BACKUP_DIR}"
fiLOG_FILE=${BACKUP_DIR}/database_back.log
DATABASE_TYPE=$1SCHEMAS=$2EXPORT_TYPE=$3PARALLEL=$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>&1exit
}fi
echo "----`date +'%y-%m-%d %H:%M:%S'`--备份完成------------------------" >>${LOG_FILE} 2>&1cd $BACKUP_DIRif [ $? -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