1. 程式人生 > >混合雲備份利用自定義Workflow保護MySQL的實踐

混合雲備份利用自定義Workflow保護MySQL的實踐

眾所周知資料庫的保護面臨著諸多問題,其中之一就是維護資料底層檔案的一致性。除了與資料庫應用的深度整合的備份方案(如SAP HANA Backint等),鬆耦合的通用備份軟體較難做到完美的資料庫的一致性保護。

為了解決該項痛點,混合雲備份實現了備份前後的Workflow指令碼支援。依賴於為特定資料庫定製的備份指令碼,我們可以得到強一致的資料庫備份點,這會大大提升資料庫備份的價值。

下面我們就來以MySQL資料庫的全量和增量備份為例子,進行混合雲備份Workflow功能的實戰演練。

全量備份

在全量備份中,我們使用mysqldump命令在備份開始之前來為資料庫建立備份歸檔,使用的備份前指令碼如下所示:

#**************************************************************
#* Copyright 2018 Ali Corporation, All Rights Reserved
#**************************************************************

# configurations
$BackupDir = "D:\DBBackup"
$MySQLInstallDir = "C:\Program Files\MySQL\MySQL Server 8.0"

$id = (Get-Date -Format yyyyMMdd-HHmmss)
& $MySQLInstallDir/bin/mysqldump.exe -A -Y -F -u $Env:USERNAME -p"$Env:PASSWORD" > $BackupDir/mysql-$id.bak
if ($LastExitCode -ne 0) {
    throw "mysqldump exited with error $LastExitCode"
}

然後利用如下的簡單指令碼在備份成功結束後清理已經被成功備份的文件以節省磁碟空間:

#**************************************************************
#* Copyright 2018 Ali Corporation, All Rights Reserved
#**************************************************************

$BackupDir = "D:/DBBackup"

Remove-Item $BackupDir/*

準備好資料庫備份及清理指令碼後,我們接下來開啟混合雲備份的客戶端UI,並建立一個新的備份工作流:
image

上圖中我們可以看到新工作流UI中提供了設定備份前/後腳本的能力,點選備份前指令碼,在彈出的UI中輸入MySQL歸檔備份指令碼的路徑,並點選預覽確認指令碼選擇正確:
image

點選備份後腳本,輸入並預覽備份後腳本:
image

最後在備份資料來源中填寫腳本里指向的資料庫備份目的地路徑(D:/DBBackup),點選提交,並等待備份完成:
image

在備份成功完成後,我們可以確認備份路徑下的資料庫備份檔案已經被備份後腳本清除,而同時在恢復UI上我們可以瀏覽到該檔案的雲端備份:
image

增量備份

對於增量備份,我們將依託於MySQL提供的Binlog功能。在上面的全量備份指令碼中我們利用引數‘-F’在每次備份資料之前將所有Binlog刷入資料庫,故而在增量備份中我們每次只需將當前的Binlog檔案備份即可。使用的備份後腳本不變,備份前指令碼如下所示:

#**************************************************************
#* Copyright 2018 Ali Corporation, All Rights Reserved
#**************************************************************

# configurations
$BackupDir = "D:\DBBackup"
$MySQLInstallDir = "C:\Program Files\MySQL\MySQL Server 8.0"

$id = (Get-Date -Format yyyyMMdd-HHmmss)
$binlogname = & $MySQLInstallDir/bin/mysql.exe -u $Env:USERNAME -p"$Env:PASSWORD" -sN -e "select @@log_bin_basename"
if ($LastExitCode -ne 0) {
    throw "mysqldump exited with error $LastExitCode"
}
copy-item "$binlogname.*" "$BackupDir"

將備份前指令碼替換之後利用同樣的流程提交備份作業,在備份成功後我們可以驗證所需要的備份的資料已經存在雲端備份庫中:
image

在驗證上述備份指令碼之後,我們還可以將這兩種備份分別指定相應的備份策略,例如每週進行一次資料庫全量備份,而在這之間每個小時都可以進行資料庫的增量備份。在需要恢復資料時我們可以根據MySQL這篇文件利用我們備份的資料進行恢復: Point-in-Time (Incremental) Recovery Using the Binary Log

以上就是利用全新發布的Workflow功能保護MySQL資料庫歸檔,並進行全量以及增量備份的全過程。但該功能不僅僅可以應用於MySQL資料庫,利用自定義指令碼我們還可以完成SQL Server,MongoDB以及SAP HANA等資料庫的備份,更多詳細功能請參考文件或直接聯絡我們,期待您的使用及反饋!