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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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框架的用法!