前面一段时间已经安装好了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写上来。还有自动化安装部署的内容。