前段时间现场的数据库服务器崩溃导致数据出现丢失,为预防数据丢失问题,现场进行数据库文件的每日自动备份。目前经过测试已完成数据库文件的备份,因此分享出来,仅供大家参考,有不足之处还望大家踊跃指正。
一、编写.sh脚本
1、编写脚本
在linux上编写一个数据库导出的脚本,用来进行数据库的自动导出
#!/bin/sh
#:本脚本自动备份数据库,每次备份完成后,删除半个月前备份数据。
#加载oracle的相关参数
export ORACLE_BASE=/datafs/oracle/db_1
export ORACLE_HOME=/datafs/oracle/db_1/11.2.0
export ORACLE_SID=LIMSDB
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH:$HOME/bin:$ORACLE_HOME/OPatch
#oracle字符集
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#获取当前时间,格式:20150210
DATE_bak=$(date +%Y%m%d%H%M)
#获取半月前的时间,格式:20150203
DATE_RM=$(date -d "15 days ago" +%Y%m%d)
#设置备份目录,
export DIR=/Lims/DATABASE
export DAR=/Lims/DATABASEBAK
echo $DIR
#开始备份
echo 'Oracle backup...'
expdp YNBY_DATA/ynby_lims2019@LIMSDB DIRECTORY=OracleBakURL1 DUMPFILE='DATA_'$DATE_bak'.dmp' logfile='DATA_'$DATE_bak'.log' SCHEMAS =YNBY_DATA cluster=N
echo '开始压缩备份'
tar czPvf $DIR/'DATA'$DATE_bak'.tar.gz' $DIR/'DATA_'$DATE_bak'.dmp' $DIR/'DATA_'$DATE_bak'.log'
mv $DIR/'DATA'$DATE_bak'.tar.gz' $DAR/
echo '移除原文件'
rm -rf $DIR/'DATA_'$DATE_bak'.dmp' $DIR/'DATA_'$DATE_bak'.log'
echo 'Oracle backup successfully.'
echo 'remove...'
rm -rf $DAR/$DATE_RM
echo 'remove successsfully.'
2、测试脚本
手动执行命名测试脚本是否成功执行:
sh [路径名]/[文件名].sh
例子:sh /Lims/sh/YNBY_Bakup_DATA.sh
3、给脚本赋x权限
chmod +x YNBY_Bakup_DATA.sh
二、crontab设置
1、检查crond与安装
检查服务状态:service crond status
联网安装:$ yum install crontabs
2、修改crontab
输入命令:crontab –e
进入后继续输入命令:0 1 * * * /Lims/sh/YNBY_Bakup_DATA.sh
设置为每天1点执行一次脚本文件
然后,保存退出:wq
sh脚本前面五个字段分别表示分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天),中间使用空格分隔,后面的表示文件路径。如有多条命令直接在下一行输入,不需要使用“;”
3、重新启动crond服务
输入命令:service crond restart
4、查看crontab的日志记录
linux中看 /var/log/cron.log这个文件就可以,可以用tail -f /var/log/cron.log观察