混合云备份利用自定义Workflow保护MySQL的实践

news/2024/7/2 23:55:32

众所周知数据库的保护面临着诸多问题,其中之一就是维护数据底层文件的一致性。除了与数据库应用的深度集成的备份方案(如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

设置备份策略
在验证上述备份脚本之后,我们还可以将这两种备份分别指定相应的备份策略,例如每月进行一次数据库全量备份,而在全量备份之间每天都可以进行数据库的增量备份。
例如每月做一次数据库的完整备份,首先我们在“策略”中创建一个每月运行的备份计划:
image
然后在之前创建工作流备份的过程中在下图所示部分指定刚刚创建的备份策略:
image
image
其他设置如前所述不变,点击提交即可创建一个按月运行的备份计划。
使用同样的步骤我们也创建一个每天运行的增量备份,最终完整备份计划如下所示:
image

以上就是利用全新发布的Workflow功能保护MySQL数据库归档,并进行全量以及增量备份的全过程。在需要恢复数据时我们可以根据MySQL这篇文档利用我们备份的数据进行恢复: Point-in-Time (Incremental) Recovery Using the Binary Log。
该功能不仅仅可以应用于MySQL数据库,利用自定义脚本我们还可以完成SQL Server,MongoDB,SAP HANA等数据库乃至Hyper-V等虚拟机的备份,更多详细功能请参考文档或直接联系我们,期待您的使用及反馈!


http://lihuaxi.xjx100.cn/news/269957.html

相关文章

使用Nginx做前端服务器时让Apache得到真实IP的方法

一:nginx.conf proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 其实这个proxy.conf里面默认都有,在nginx.conf使用include proxy.conf就可以 二:apa…

我为什么读博, 以及我为什么不读博?这是个问题!

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达我为什么读博,以及我为什么不读博?研究生三年后,毕业生都做出了自己的选择,一部分人就业,一部分人选择继续深造…

卸载Notepad++!事实已证明,它更牛逼……

点击上方蓝色“方志朋”,选择“设为星标”回复“666”获取独家整理的学习资料!作者:lucidalucida.me/blog/sublime-text-complete-guide/摘要(Abstract) 本文系统全面的介绍了 Sublime Text,旨在成为最优秀…

清华 NLP 实验室:AI 诗人「九歌」喊你来对对子

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达转自 | 新智元来源 | 清华NLP编辑 | LQ暮春时节,碰上天朗气清、惠风和畅,古代文人或「一觞一咏,畅叙幽情」,或「风乎舞雩&…

详解CSS设置默认字体样式

浏览器默认的样式往往在不同的浏览器、不同的语言版本甚至不同的系统版本都有不同的设置,这就导致如 果直接利用默认样式的页面在各个浏览器下显示非常不一致,于是就有了类似YUI的reset之类用来尽量重写浏览器的默认设置保证各个浏览器样式一致性的做法。…

5年Python功力,总结了10个开发技巧

作者 | 写代码的明哥来源 |Python编程时光(ID: Cool-Python)如何在运行状态查看源代码?查看函数的源代码,我们通常会使用 IDE 来完成。比如在 PyCharm 中,你可以 Ctrl 鼠标点击 进入函数的源代码。那如果没有 IDE 呢&…

数据库设计心得

这周我们组设计了数据库,并且在讨论课上与老师以及同学们进行了交流,找出了设计的几点问题: 首当其冲的是权限问题 不同的用户如果不分配指定的角色,就可能会具有某些权限来修改我们不希望被修改的数据,从而导致数据库…

java entrypoint_jib自定义entrypoint

序本文主要研究一下jib自定义entrypoint的用场mavencom.google.cloud.toolsjib-maven-plugin0.9.108080true/bin/sh-cjava ${JAVA_OPTS} -cp /app/resources/:/app/classes/:/app/libs/* com.example.JibDemoApplicationjava:8u172-jre-alpinejib-demo:${maven.build.timestamp…