混合云备份利用自定义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等数据库的备份,更多详细功能请参考文档或直接联系我们,期待您的使用及反馈!

猜你喜欢

转载自yq.aliyun.com/articles/670112