灌溉梦想,记录脚步
« »
2010年12月10日技术合集

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方法,具体参考上篇日志。

日志信息 »

该日志于2010-12-10 16:48由 kevin 发表在技术合集分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

发表回复