Linux服務器數據庫(MySQL、ORACLE)簡單的異地備份方案
Linux服務器MySQL數據庫簡單的異地備份方案
www.2cto.com
首先簡單說下:
1、執行腳本導出數據庫。
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/backup.sql
2、使用scp將導出的數據庫文件傳輸到其他服務器上,一般進行異地備份,容災。
scp -P 195 /bak/db/backup.sql [email protected]:/bak
其中195為ssh端口號,如果是默認的22,可以省略 -P 22。
-----------------------------------------------------------------
www.2cto.com
現在需要編寫一個sh腳本,並設定到定時任務中
sh腳本內容如下:
[java]
#!/bin/sh
filename=`date '+%Y%m%d-%H%M%S'`
filename="${filename}bak.sql"
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/${filename}
scp -P 195 /bak/db/${filename} [email protected]:/bak
echo "success"
sh文件不要忘記使用 chmod +x backup.sh 進行授予可執行權限。
假設我們將sh文件存放與opt目錄下,需要配置一下定時任務
編輯文件:vi /etc/crontab 設定每天凌晨4點半執行
30 04 * * * root /bin/sh /opt/db/backup-database.sh
可以使用命令:cat /var/log/cron 查看定時任務執行日志
如上處理後,服務器就會自動進行數據庫備份並上傳到異地服務器上了,但是有個問題還需要解決,那就是讓scp命令不需要密碼才行。
具體配置方法參考:http://www.BkJia.com/os/201212/175290.html
下面說一下oracle與mysql的不同之處
oracle備份一般情況需要使用 su - oracle 切換到oracle用戶下才能執行,下面說一下直接在root用戶下如何進行操作。
特殊的地方就是,有的操作需要root用戶(比如無密碼scp操作,我這裡只是舉例),有的操作需要oracle用戶(exp導出用戶)。
關鍵命令:su - oracle -c "/opt/expdatabase.sh"
意思是在root用戶下不需要切換到oracle用戶,而直接使用oracle用戶的角色執行 expdatabase.sh 文件。
www.2cto.com
我們需要在 root 下的 sh 文件中調用 expdatabase.sh 文件。
shell 腳本如下:
1、主 sh 腳本,root 執行
[java]
#!/bin/sh
filename=`date '+%Y%m%d-%H%M%S'`
filename="${filename}bak.dmp"
su - oracle -c "/u01/oradata/bak/expdatabase.sh ${filename}"
scp -P 195 /u01/oradata/bak/${filename} [email protected]:/bak/202.102.41.35
echo "Execution completed"
2、需要用oracle用戶的角色來執行的sh腳本 expdatabase.sh
[java]
#!/bin/sh
#進入oracle home
cd /u01/oracle
#加載oracle用戶環境變量
. ./.bash_profile
exp user/password@clmt file=/u01/oradata/bak/$1 full=y