众所周知数据库的保护面临着诸多问题, 其中之一就是维护数据底层文件的一致性. 除了与数据库应用的深度集成的备份方案 (如 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, 并创建一个新的备份工作流:
上图中我们可以看到新工作流 UI 中提供了设置备份前 / 后脚本的能力, 点击备份前脚本, 在弹出的 UI 中输入 MySQL 归档备份脚本的路径, 并点击预览确认脚本选择正确:
点击备份后脚本, 输入并预览备份后脚本:
最后在备份数据源中填写脚本里指向的数据库备份目的地路径 (D:/DBBackup), 点击提交, 并等待备份完成:
在备份成功完成后, 我们可以确认备份路径下的数据库备份文件已经被备份后脚本清除, 而同时在恢复 UI 上我们可以浏览到该文件的云端备份:
增量备份
对于增量备份, 我们将依托于 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"
将备份前脚本替换之后利用同样的流程提交备份作业, 在备份成功后我们可以验证所需要的备份的数据已经存在云端备份库中:
在验证上述备份脚本之后, 我们还可以将这两种备份分别指定相应的备份策略, 例如每周进行一次数据库全量备份, 而在这之间每个小时都可以进行数据库的增量备份. 在需要恢复数据时我们可以根据 MySQL 这篇文档利用我们备份的数据进行恢复: Point-in-Time (Incremental) Recovery Using the Binary Log
以上就是利用全新发布的 Workflow 功能保护 MySQL 数据库归档, 并进行全量以及增量备份的全过程. 但该功能不仅仅可以应用于 MySQL 数据库, 利用自定义脚本我们还可以完成 SQL Server,MongoDB 以及 SAP HANA 等数据库的备份, 更多详细功能请参考文档或直接联系我们, 期待您的使用及反馈!
来源: https://yq.aliyun.com/articles/670112