mysql oracle linux_mysql、oracle在Linux和Windows下的简单自动备份

前面一段时间已经安装好了mysql、oracle等常用数据库,但是数据库在使用时必须做到定时备份,这样能够在数据库出现问题时及时恢复到可用状态。那么下面我们就在Linux和Windows环境下测试使用mysql和oracle的自动备份脚本。

1.Linux环境下

#!/bin/sh# DatabaseinfoDB_USER=""DB_PASS=""DB_HOST=""DB_NAME=""# Others vars

BIN_DIR="/ps/mysql/bin"#the mysql bin path

BCK_DIR="/data/mysqlbak" #the backup filedirectory

DATE=`date +"%Y-%m-%d %H:%M:%S"` #dateof now

days=7#Backup retention days

# TODO

#/usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql

# $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql

#mysqldump--opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME |gzip > $BCK_DIR/db_dczdpscms_$DATE.sql.tar.gz

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME |gzip > $BCK_DIR/$DB_NAME"_"$DATE.sql.gzecho $(date '+%Y-%m-%d %T') "$DB_NAME数据库备份成功!">>/data/mysqlbaklog/$DB_NAME.log

#Delete expired backupsfind $BCK_DIR -type f -name "*.sql" -mtime +$days -exec rm -rf {} \; > /dev/null 2>&1#-type f File type found

#-mtime +7 Find files by file change time#-exec rm -rf {} \; The exec option is followed by the command or script to be executed, followed by a pair of {}, a space and a \, and finally a semicolon.

#/dev/null 2>&1 Redirect the standard error to standard output and drop it below /dev/null.

#throw all standard outputs and standard errors into the trash can.The& indicates that the command is executed in the background.

以上脚本的功能只是使用mysql的mysqldump工具备份指定的整个数据库,(也可只备份核心表)同时生成压缩的sql文件以gzip压缩成.gz格式。

脚本设定最大保留天数为7天,可以自行设定需要保留的天数。同时在简单输出备份情况到日志文件,方便查看数据库的备份情况。

二、oracle

同样oracle也可以使用同样的方式来备份数据库

#!/bin/bash

export ORACLE_HOSTNAME=export ORACLE_BASE=/data/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.1/export ORACLE_SID=orcl

export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH

export LC_ALL="en_US"export LANG="en_US"export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"export NLS_DATE_FORMAT='YYYY-MON-DD HH24:MI:SS'

date=`date +%Y_%m_%d`

#设置删除7天之前的备份文件

days=7#Oracle数据库服务器IP、端口、SID

orsid='orcl'orowner=bakuser=bakpass=bakdir=/data/app/oracle/admin/orcl/dpdump

#备份数据库名称

bakdata=$orowner"_"$date.dmp

#备份执行时候生成的日志文件名称

baklog=$orowner"_"$date.log

#最后保存的Oracle数据库备份文件

ordatabak=$orowner"_"$date.tar.gz

#执行备份

expdp $bakuser/$bakpass dumpfile=$bakdata log=$baklog schemas=$bakuser

#删除日志文件find $bakdir -type f -name "*.log" -mtime +$days -exec rm -rf {} \;

#删除7天前备份文件find $bakdir -type f -name "*.dmp" -mtime +$days -exec rm -rf {} \;

最近出现了一点oracle的环境配置不生效的问题,我将环境配置写在了脚本中,为了避免指令无法使用

同样也是简单备份同时保留7天。

可以选择使用expdp数据泵和一般的exp来备份数据库(exp可以用来实现增量备份),expdp备份效率高,但是只能在数据库本地使用。

以上仅是简单的数据库备份,考虑到更好的容灾性,首先数据库可以是分布式的,同时之间互相同步备份。一般的情况可以在使用上述脚本后叫入scp命令将备份的数据已到多台存储服务器上,以提到容灾能力。

当备份的内容较多,内容不同时我一般会用时间为分隔将其放入不同的目录文件夹中方便管理。更具体的备份方式会在后续写出来。

2、Windows

在Windows上常用的是Windows自己的脚本批处理来实现,以下为mysql和oracle的.bat批处理文件

一、mysql

@echo offMODE con: COLS=71 LINES=25@echo 变量信息set "date_time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%"

set "bak_dir=C:\sqlback\"

set "days=7"@echo 数据库信息set "db_user=root"

set "db_pass=123456"

set "db_host=localhost"

set "db_name=jdzd"@echo 创建备份目录

md %bak_dir%

@echo 开始备份数据库。

echo %date_time% Start backing up database files...>> %bak_dir%\sqlback.log

::mysqldump-u%db_user% -p%db_pass% -h%db_host% %db_name% > %bak_dir%\%date_time%%db_name%.sql

mysqldump-u%db_user% -p%db_pass% -h%db_host% %db_name% |gzip > %bak_dir%\%date_time%%db_name%.sql.gz

@echo 删除七天前备份的文件。

forfiles/p "%bak_dir%" /s /m *.gz /d -7 /c "cmd /c del @path"echo %date_time% Delete expired files!>> %bak_dir%\sqlback.log

echo %date_time% Successfully backed up the database files!>> %bak_dir%\sqlback.log@echo onexit

实现的功能同Linux下的一样

二、oracle

@echo 开始备份oracle数据

@echooff

set

set curdir="D:\oraclebackup\badm"echo %curdir%set t1=%Time:~0,1%if "%t1%"==" " set t1=0

set td=%Date:~0,4%%Date:~5,2%%Date:~8,2%%t1:~0,1%%Time:~1,1%%Time:~3,2%%Time:~6,2%exp badm_gis/primesoft@orcl owner=(badm_gis) file=%curdir%\badm_gis_%td%.dmp rows=y log=%curdir%\badm_gis_%td%.Log buffer=800000echo 建立压缩文件并删除源备份文件日志文件

zip %curdir%\badm_gis_%td%.zip %curdir%\badm_gis_%td%.dmp %curdir%\badm_gis_%td%.Log

del %curdir%\*.dmp

del %curdir%\*.Log

echo 完成文件压缩

forfiles/p "D:\oraclebackup\badm" /s /m *.* /d -7 /c "cmd /c del @path"@echoon@echo 备份oracle数据结束

最近在学习python,有时间会将python写的自动化backup写上来。还有自动化安装部署的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、提供了oracle数据库备份脚本,导出dmp文件 2、定时任务由操作系统提供的支持,在操作系统中设置定时任务,由操作系统定期执行脚本 3、补充。压缩包脚本有点问题,不能删除旧的备份文件。需要自动删除历史备份文件请用最新脚本: @echo off @echo ================================================ @echo windows环境Oracle数据库自动备份脚本 @echo 说明:启动备份时,需要配置以下变量 @echo 1、BACKUP_DIR 指定要备份到哪个目录 @echo 2、ORACLE_USERNAME 指定备份所用的Oracle用户名 @echo 3、ORACLE_PASSWORD 指定备份所用的Oracle密码 @echo 4、ORACLE_DB 指定备份所用的Oracle连接名 @echo 5、BACK_OPTION 备份选项,可以为空,可以为full=y,可以为owner=a用户,b用户 等等.... @echo 6、RAR_CMD 指定RAR命令行压缩工具所在目录 @echo ================================================ rem 以下变量需要根据实际情况配置 set BACKUP_DIR=D:\tools\oracle_bak\backup230 set ORACLE_USERNAME=PLATADMIN set ORACLE_PASSWORD=123456 set ORACLE_DB=ORCL set BACK_OPTION=owner=PLATADMIN set RAR_CMD="D:/Program Files/WinRAR/Rar.exe" rem for /f "tokens=1,2" %%a in ('date/t') do set TODAY=%%a rem set BACK_NAME=%ORACLE_DB%_%TODAY%(%time:~0,2%时%time:~3,2%分)_ set BACK_NAME=%Date:~0,4%%Date:~5,2%%Date:~8,2%%Time:~0,2%%Time:~3,2%%Time:~6,2% set BACK_FULL_NAME=%BACKUP_DIR%/%BACK_NAME% rem 开始备份 exp %ORACLE_USERNAME%/%ORACLE_PASSWORD%@%ORACLE_DB% %BACK_OPTION% file="%BACK_FULL_NAME%.dmp" log="%BACK_FULL_NAME%exp.log" rem 压缩并删除原有文件 %RAR_CMD% a -df "%BACK_FULL_NAME%back.rar" "%BACK_FULL_NAME%.dmp" "%BACK_FULL_NAME%exp.log" rem 删除15天前的备份文件 forfiles /p %BACKUP_DIR% /s /m *.rar /d -15 /c "cmd /c del @file"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值