適用於中小型資料庫,採用邏輯備份方式。核心腳本內容如下:
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
# 執行匯出 (direct=y 直寫模式提升效能)
exp test/test@test1 file=/data/backup/test_15day.dmp direct=y
# exp 不支援覆蓋,採用重命名方式輪替
mv -f /data/backup/test_15day.dmp /data/backup/test.dmp
# 壓縮歸檔,檔名含時間戳
gzip -c /data/backup/test.dmp > /data/backup/test_`date +%y%m%d%H%M`.gz
使用 expect 自動化 SCP 下載:
#!/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 "password:"
send "$passWord\r"
expect eof
# 完整備份指定資料庫 (可多個,空格分隔)
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
tar -zcvpf /data/NAME.tgz file1 file2 ...
#!/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
使用 crontab -e 編輯排程,常見範例:
| 排程表達式 | 執行時間說明 |
|---|---|
30 21 * * * | 每晚 21:30 |
45 4 1,10,22 * * | 每月 1、10、22 號 04:45 |
10 1 * * 6,0 | 每週六、日 01:10 |
0,30 18-23 * * * | 每天 18:00-23:00 每 30 分鐘 |
0 4 1 1 * | 每年 1 月 1 號 04:00 |
建議:將上述備份腳本存為獨立 .sh 檔案並賦予執行權限 (chmod +x),再在 crontab 中呼叫絕對路徑。