請問各位大大,我需要做異地備份,假設在a地,每次都有15-20g的資料容量,而每次備份到b地都要花二三天時間(VPN 2M),請問有什麼方法可以讓資料庫自動在每天固定時間自行壓縮成一個縮壓檔,然後我再利用原本的備份軟體備份到B地。(資料庫是sql2000 的,我大約一周做一次完整備份平均會有15-20g容量,而使用資料庫所備份出來的bak檔每次的日期會不一樣,請問有方法自動縮壓過再進行異地備份嗎)
請問各位大大,我需要做異地備份,假設在a地,每次都有15-20g的資料容量,而每次備份到b地都要花二三天時間(VPN 2M),請問有什麼方法可以讓資料庫自動在每天固定時間自行壓縮成一個縮壓檔,然後我再利用原本的備份軟體備份到B地。(資料庫是sql2000 的,我大約一周做一次完整備份平均會有15-20g容量,而使用資料庫所備份出來的bak檔每次的日期會不一樣,請問有方法自動縮壓過再進行異地備份嗎)
重點是啥資料庫
MSSQL?Oracle?MySQL?
每種資料庫有其資料庫匯出的方式
匯出後靠其它程式壓縮
不就這樣?
unix靠crontable,Windows靠排程
所以,你手頭上有啥?
我大陸使用的是windows2003 server 及mssql-2000資料庫
每日差異備份產生資料為:2G
完整備份為:15-20G(因完整備份資料過大,所以我才想使用壓縮方式做備份)
一、我需做異地備份,a(台灣) <----VPN 2M---> b(大陸)
二、我在a地裝syncbackpro備份軟體,b地裝ftpserver軟體,透過vpn使用ftp方式把b地備份至a地(vpn傳輸速度為2m 約150-200k/sec)
三、如在b地 手動執行winrar 壓縮400m 時間約二分鐘 壓縮完容量為40m左右
不壓縮直接透過vpn傳輸400M至a地 需50-60分鐘
傳輸1.6G 約6小時
傳輸12G 約25小時
ps.我是想說有沒有什麼方式 讓資料庫產生出來的檔案自行壓縮,然後我在備份軟體裡設定排程使用備份至a地。
你是用啥方式將資料庫匯出?
以我備份MySQL方式而言
1.mysqldump(MySQL自己的匯出工具)
2.rar壓縮
3.curl 丟至FTP主機(curl有Windows版的執行檔)
unix上就排程執行Shell script
Windows上就排程執行Batch script
but...
你的系統光差異就有2G?光資料庫的差異?還是連系統有的沒有的Log?
看何時 MS-SQL 開始備份
就約晚 1 分鐘用 AT 執行 CHECK.bat
例如: MS-SQL 備份到 d:\Backup
準備 sleep.exe 約等待 1 分鐘
c:\bat\
sleep.cs
===================================
using System;
class Sleep
{
static void Main()
{
System.Threading.Thread.Sleep(60000);
}
}
===================================
執行(ps:\v.?.?\ 請依自己的版本修改)
c:\bat>C:\WINDOWS\Microsoft.NET\Framework\v?.?\csc sleep.cs
然後開始編輯幾個批次檔
before.bat
===================================
dir d:\backup | findstr "個檔案" > before.txt
===================================
after.bat
===================================
dir d:\backup | findstr "個檔案" > after.txt
===================================
check.bat
===================================
@ECHO OFF
CLS
echo _____________________________________________________________________________
echo ^| _______ _ _ ______ __ __ ^|
echo ^| ^| ____ \ \ \ / / ^|_____ \ / \ / \ ^|
echo ^| ^| ^| ^| ^| \ \ / / \ ^| / /\ \ / /\ \ ^|
echo ^| ^| ^|___/ / \ \_/ / _____/ / / / \ \ / / \ \ ^|
echo ^| ^| ____ \ ^> _ ^< / _____/ / /____\ \ / /____\ \ ^|
echo ^| ^| ^| \ \ / / \ \ ^| ^| / ________ \ / ________ \ ^|
echo ^| ^| ^|_____^| ^| / / \ \ ^| ^|_____ / / \ \ / / \ \ ^|
echo ^| ^|_________/ /_/ \_\ \_______\ /_/ \_\ /_/ \_\ ^|
echo ^|_____________________________________________________________________________^|
:start
ECHO %TIME%
before.bat
sleep
after.bat
for /f "delims=*" %i in (before.txt) do set str1="%i"
for /f "delims=*" %i in (after.txt) do set str2="%i"
if not "%str1%"=="%str2%" goto start
if "%str1%"=="%str2%" call backup.bat
===================================
backup.bat 把檔案壓縮到 sync 的目錄裏, 壓縮結束刪除檔案或是搬到某個暫存目錄, 隔天執行 check.bat 前先刪除該檔.
就是把五個檔案放到
C:\BAT 下
sleep.cs
before.bat
after.bat
check.bat
backup.bat <====== 你自己要把檔案壓縮和放到哪都寫在這裡面
然後開 cmd (命令提示字元) 到提示符後出現 c:\BAT>
輸入
C:\WINDOWS\Microsoft.NET\Framework\v?.?\csc sleep.cs
因為不清楚你所安裝的 .NET Framework 版本
所以用 v?.?
請先用檔案總管找出 c:\windows\Microsoft.NET\Framework 目錄下的 v?.? 內有 csc.exe 檔案 把 v.?.?...... 替換 上面命令的 v?.?
看是用排程執行 check,bat 或是 AT 命令加進去.
但是時間要比 備份計畫晚個一分鐘執行!
before 和 after 是把該目錄檔案大小儲存到 檔案
然後讀出來比對相差一分鐘的內容如果不同就重新來一次.
相同就執行 backup.bat
backup.bat 就是用壓縮軟體把
E:\TransactionLogbackup\Com_bak 目錄壓縮起來
"%ProgramFiles%\WinRAR\rar" a -r -y -o+ -m5 E:\Backup\SQL.rar E:\TransactionLogbackup\Com_bak
放到 E:\Backup\裏面 命名為 SQL.rar
書籤