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数据库

DBA使用Shell完成自动化相关工作

Shell变量的作用类型,及如何利用脚本配合任务计划远程备份mysql数据库

小企业sql server数据备份shell脚本解决方案

web服务文件更新自动同步数据库主从复制shell脚本实现网站代码备份和mysql备份

利用SHELL脚本实现将Oracle数据库的每日EXPDP导出文件复制到远程服务器