Oracle,MySQL数据库自动备份实例
1,关于Oracle,由于我需要备份的Oracle数据库较小,所以采用exp方式,脚本如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #环境变量 export ORACLE_BASE=/home/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db export ORA_CRS_HOME=$ORACLE_BASE/product/10.2.0/crs export PATH=$PATH:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin export ORACLE_SID=test1 export LD_LIBRARY_PATH=$ORACLE_HOME/lib32 export LD_LIBRARY_PATH_64=$ORACLE_HOME/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib #进行备份 exp test/test@test1 file=/data/bakup/test_15day.dmp direct=y #由于exp未主动覆盖备份文件,这里就采用mv重命名 mv -f test_15day.dmp test.dmp #将备份进行压缩存档 gzip -c /data/bakup/test.dmp > /data/bakup/test_`date +%y%m%d%H%M`.gz |
若是oracle备份,在远端主机,可以用scp拖回本地,这里采用expect工具自动登录
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/expect -f #定义密码 set password oracle #下载过程 spawn scp oracle@10.0.0.1:/data/backup/test.dmp /data/oracle_backup_test/ set timeout 200 expect "oracle@10.0.0.1's password:" set timeout 200 send "$password\r" set timeout 200 send "exit\r" expect eof |
2,关于MySQL,这里采用mysqldump工具进行导出,命令较为简单
1 2 3 4 | #命令中包含地址,用户名密码,数据库名称,其中数据库名称可以为多个 mysqldump -h 10.0.0.9 -ubackup -p123456 test > /data/mysql_backup/test.sql #这里通过拷贝进行归档 cp /data/mysql_backup/test.sql /data/mysql_backup/backup-`date +%y%m%d%H%M`.sql |
3,备份的压缩归档,通过压缩可以减少存储空间的占用
1 2 3 | #压缩命令,这里加上参数p,是为了保留原始文件信息,便于恢复 tar -zcvpf /data/NAME.tgz file1 file2 #file1,file2可以为多个,中间用空格隔开,可以是目录,可以是文件 |
4,将备份上传到ftp服务器
#这是一个将数据库备份压缩归档并上传ftp服务器的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/sh #定义日期,最小到天,并对数据库进行压缩打包 DATE=`date +%Y%m%d` tar -zcvpf /data/ftp/db_$DATE.tgz /data/mysql/test.sql /data/other/ /data/oracle/ #定义ftp服务器地址,用户,密码信息 host="10.0.0.21" id="admin" pwd="666666" #定义本地文件路径 basedir="/data/ftp" #上传过程 ftp -n "$host" <<EOC user $id $pwd binary prompt lcd $basedir cd backup mput db_$DATE.tgz bye EOC |
5,添加为系统任务自动执行
采用crontab方法,具体参考上篇日志。