作者 | JiekeXu
来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)
如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天给大家分享几个数据库备份脚本,欢迎点击上方蓝字“JiekeXu DBA之路”关注我的公众号,标星或置顶,更多干货第一时间到达!
之前有朋友问有没有备份脚本,给分享一个,我就很是好奇,实在不会自己写,网上一搜一大堆的东西麽,拿过来改吧改吧就可以用了呀,实在没有啥可写的,但有人要求了,这里就水一篇吧。
备份脚本六个注意点
在写脚本前我这里按照个人习惯大概总结了以下六点,感兴趣的可以继续看看,不感兴趣的直接跳过就好。
-
首先要注意的一点就是 shell 环境是 bash 还是 sh ,需要在你的脚本开头中注明。
#!/bin/bash
-
其次就是数据库环境变量需要申明,例如直接加载 .bash_profile 或者单独申明 ORACLE_HOME、ORACLE_BASE 等。
source home/oracle/.bash_profile
或者
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/product/11.2.0/dbhome_1
ORACLE_SID=JiekeXu1
ORACLE_USER=oracle
ORACLE_GROUP=oinstall
-
接下来就是定义相关备份目录、日志目录等全局通用目录。
DICPATH=/db_backup/oracle/rman
LOGPATH=$DICPATH/log
DATPATH=$DICPATH/data
-
到这里呢才算开始正式的备份任务,使用数据库备份工具编写备份脚本。
rman target
mysqldump ......
-
备份完成需要考虑存放日期,存放一周,两周,或者 scp、ftp 等传到远程异地,然后考虑清理本地的磁盘空间。
--清理备份产生的日志
find ${DIR}/log -name ${NAME}\* -mtime +90 | xargs rm -f
--清理备份集
--使用操作系统命令直接删除备份集
find ${DIR}/data -name ${NAME}\* -mtime +30 | xargs rm -f
-
这一步就是部署备份了,一般借助操作系统的 crontab 定时任务来搞定。
crontab 命令的语法
crontab [-u username] [-l|-e|-r]
选项与参数:
-u :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
-e :编辑 crontab 的工作内容
-l :查阅 crontab 的工作内容
-r :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中的星期几 (0 - 6) (星期天为 0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
另外关于 crontab 还有几点要注意的:
-
定时任务添加注释
-
>/dev/null 2>&1 ==> &>/dev/null,别随意打印日志文件
-
定时任务里面的程序脚本尽量用全路径
-
避免不必要的程序以及命令输出
-
定时任务之前添加注释
下面看几个 crontab 的例子。
0 */2 * * * sbin/service httpd restart 意思是每两个小时重启一次apache
50 7 * * * sbin/service sshd start 意思是每天7:50开启ssh服务
50 22 * * * sbin/service sshd stop 意思是每天22:50关闭ssh服务
0 0 1,15 * * fsck home 每月1号和15号检查/home 磁盘
1 * * * * home/jieke/backup 每小时的第一分执行 home/jieke/backup这个文件
00 03 * * 1-5 find home/oracle "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录 home/oracle 中,查找文件名为*.xxx的文件,并删除4天前的文件。
30 6 */10 * * ls 意思是每月的1、11、21、31日是的6:30执行一次ls命令
下面正式分享几个脚本。
Oracle rman 增备脚本
vim home/oracle/scripts/oracle_rman.sh
#!/bin/bash
source home/oracle/.bash_profile
DICPATH=/db_backup/oracle/rman
LOGPATH=$DICPATH/log
DATPATH=$DICPATH/data
if [ ! -d $LOGPATH ]; then
mkdir -p $LOGPATH
fi
if [ ! -d $DATPATH ]; then
mkdir -p $DATPATH
fi
if [ "$1" = "full" ]; then
echo 'jxrt'
rman target nocatalog msglog=$LOGPATH/rman_db_`date '+%Y%m%d%H%M%S'`.log