需求: 备份 oracle 数据库并将数据备份的文件上传到 ftp 所在服务器
ftp 服务器 IP 地址: 192.168.6.9
ftp 服务器账户 / 密码: test/test2018
1,oracle 用户创建备份脚本路径:
- #su - oracle
- $ mkdir /u0/app/backup/bin
- $ cd /u01/app/backup/bin
2, 创建备份脚本:
- $ vi /u01/app/backup/bin/bak.sh
- #!/bin/sh
- source /home/oracle/.bash_profile
- timedate=$(date +%Y%m%d%H%M%S)
- bakdbname=hb
- bakdbpasswd=h1234
- dumpbame=hd
- bakdbhome=/u01/app/backup
- expdp $bakdbname/$bakdbpasswd directory=backDir dumpfile=$dumpbame-$timedate.dmp logfile=$bakdbname-$timedate.log
- zip -r $bakdbhome/$dumpbame-$timedate.zip $bakdbhome/$dumpbame-$timedate.dmp $bakdbhome/$bakdbname-$timedate.log #压缩 dmp 文件及日志文件
- find $bakdbhome/*.log -mtime +10 -exec rm -rf {} \;
- find $bakdbhome/*.zip -mtime +10 -exec rm -rf {} \;
- cd $bakdbhome #切换到备份文件目录下
- ftp -v -n 192.168.6.9 << EOF #执行 ftp 命令
- user test test2018 #用户名和密码
- binary #切换传输模式为二进制模式, 以字节传输 (除文字文件外皆用此模式)
- hash #切换 #字号的出现, 每一个 #字号表示传送了 1024/8192BYTES
- put $dumpbame-$timedate.zip $dumpbame-$timedate.zip
- bye
- EOF
- # 将日志文件的 GB2312 转为 UTF-8 编码, 这样脚本执行的 log 日志文件中文不会乱码
- iconv -f gb2312 -t utf8 $bakdbname-$timedate.log -o $bakdbname-$timedate.log
- find $bakdbhome/*.dmp -exec rm -rf {} \; #前面压缩后, 删除原 dmp 文件
- FTP 的命令行格式为:
- ftp -v -d -i -n -g [主机名] , 其中
- -v 显示远程服务器的所有响应信息;
- -n 限制 ftp 的自动登录, 即不使用;
- hash: 每传输 1024 字节, 显示一个 hash 符号 (#);
- .n etrc 文件;
- -d 使用调试方式;
- -g 取消全局文件名;
- bye: 退出 ftp 会话过程;
- get 下传文件;
- mget 批量下传文件, 需配合万用字元, 例如: MGET*.GZ;
- put 上传文件;
- mput 批量上传文件, 需配合万用字元;
- recv 相当于 GET(RECV 为 RECEIVE 的简写):
- send 相当于 PUT.
- 给 bak.sh 脚本执行权限, 做计划任务即可
- $ crontab -l
- 10 0 * * */bin/bash /u01/app/backup/bin/bak.sh
来源: http://www.bubuko.com/infodetail-2670819.html