shell脚本每天自动进行数据库备份与远程复制
Posted 嘻哈鸭与王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本每天自动进行数据库备份与远程复制相关的知识,希望对你有一定的参考价值。
之前忙着找实习和期末考试也好久没更新了,现在终于算稳定下来了,下午写了个小脚本,可以每天自动备份Linux服务器上的oracle数据库,然后远程复制到另一个服务器,分享一下
脚本主要用到了expect来进行自动输入密码和crontab设置脚本定时运行
backup.sh进行数据库的备份,按日期生成一个备份文件,copy.sh进行备份文件的远程复制
背景置灰的为Linux命令
安装expect
make && make install
backup.sh
图中Oracle数据库备份语句为:
‘expdp 用户名/密码 directory=文件夹 dumpfile=文件名称-`date+20%y-%m-%d`.dmp schemas= ’
备份生成*.dmp文件后执行copy.sh脚本进行远程复制
copy.sh
使用scp命令进行远程复制,这里直接使用scp不能匹配通配符,会报不存在*.dmp的错误,在命令前加上bash -c即可
使用expect解决自动输入远程密码问题,检测密码、password、yes/no等字段来匹配输入内容。
crontab
使用crontab来设置脚本定时执行
crontab -e
这样就设置为了每天1时30分执行 backup.sh脚本
linux应该都有crontab,没有的话可以安装一下:
yum install vixie-cron
yum install crontabs
crontab用法
crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-yearday-of-week commands
合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有几个特殊的符号:"*"、"/"和"-"、","
*代表所有的取值范围内的数字
"/"代表每的意思,"/5"表示每5个单位
"-"代表从某个数字到某个数字
","分开几个离散的数字
以上是关于shell脚本每天自动进行数据库备份与远程复制的主要内容,如果未能解决你的问题,请参考以下文章
Shell变量的作用类型,及如何利用脚本配合任务计划远程备份mysql数据库