Linux服務器數據庫(MySQL、ORACLE)簡單的異地備份方案
Linux服務器MySQL數據庫簡單的異地備份方案
首先簡單說下:
1、執行腳本導出數據庫。
mysqldump -h127.0.0.1 -P3306 -uroot -ppassword dbname > /bak/db/backup.sql
2、使用scp將導出的數據庫文件傳輸到其他服務器上,一般進行異地備份,容災。
scp -P 195 /bak/db/backup.sql root@xxx.xxx.xxx.xxx:/bak
其中195為ssh端口號,如果是默認的22,可以省略 -P 22。
-----------------------------------------------------------------------------------------------------------------
現在需要編寫一個sh腳本,並設定到定時任務中
sh腳本內容如下:
#!/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} root@xxx.xxx.xxx.xxx:/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命令不需要密碼才行。
具體配置方法參考我的另一篇博客:https://blog.csdn.net/catoop/article/details/8284803
下麵說一下oracle與mysql的不同之處
oracle備份一般情況需要使用 su - oracle 切換到oracle用戶下才能執行,下麵說一下直接在root用戶下如何進行操作。
特殊的地方就是,有的操作需要root用戶(比如無密碼scp操作,我這裏隻是舉例),有的操作需要oracle用戶(exp導出用戶)。
關鍵命令:su - oracle -c "/opt/expdatabase.sh"
意思是在root用戶下不需要切換到oracle用戶,而直接使用oracle用戶的角色執行 expdatabase.sh 文件。
我們需要在 root 下的 sh 文件中調用 expdatabase.sh 文件。
shell 腳本如下:
1、主 sh 腳本,root 執行
#!/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} root@124.207.35.132:/bak/202.102.41.35 echo "Execution completed"
2、需要用oracle用戶的角色來執行的sh腳本 expdatabase.sh
#!/bin/sh #進入oracle home cd /u01/oracle #加載oracle用戶環境變量 . ./.bash_profile exp user/password@clmt file=/u01/oradata/bak/$1 full=y
最後更新:2017-04-02 00:06:55