Oracle,MySQL数据库自动备份实例
1,关于Oracle,由于我需要备份的Oracle数据库较小,所以采用exp方式,脚本如下
#环境变量
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
#环境变量
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工具自动登录
#!/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
#!/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工具进行导出,命令较为简单
#命令中包含地址,用户名密码,数据库名称,其中数据库名称可以为多个
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
#命令中包含地址,用户名密码,数据库名称,其中数据库名称可以为多个
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,备份的压缩归档,通过压缩可以减少存储空间的占用
#压缩命令,这里加上参数p,是为了保留原始文件信息,便于恢复
tar -zcvpf /data/NAME.tgz file1 file2
#file1,file2可以为多个,中间用空格隔开,可以是目录,可以是文件
#压缩命令,这里加上参数p,是为了保留原始文件信息,便于恢复
tar -zcvpf /data/NAME.tgz file1 file2
#file1,file2可以为多个,中间用空格隔开,可以是目录,可以是文件
4,将备份上传到ftp服务器
#这是一个将数据库备份压缩归档并上传ftp服务器的脚本
#!/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" <
user $id $pwd
binary
prompt
lcd $basedir
cd backup
mput db_$DATE.tgz
bye
EOC
#!/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" <
user $id $pwd
binary
prompt
lcd $basedir
cd backup
mput db_$DATE.tgz
bye
EOC
5,添加为系统任务自动执行
采用crontab方法,具体参考上篇日志。