云备份 CBR
云备份 CBR
- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
- 用户指南
- 混合云备份特性指南
- 最佳实践
- API参考
- SDK参考
- 场景代码示例
- 故障排除
-
常见问题
- 概念类
- 计费类
-
备份类
- 备份时,需要停止服务器吗?
- 包含数据库的服务器是否可以备份?
- 如何区分备份是自动备份还是手动备份?
- 备份支持选择磁盘的某个分区进行备份吗?
- 服务器能否跨区域备份?
- 如何通过云服务器备份实现云服务器数据跨区域迁移?
- 可以将两个磁盘的数据备份至一个磁盘上吗?
- 如何同区域同可用区的复制一个磁盘?
- 支持在存储库之间进行备份迁移吗?
- 删除资源后还可以使用备份恢复数据吗?
- 单个资源可以创建多少个备份?
- 删除全量备份后,还可以使用增量备份恢复数据吗?
- 备份时可以终止备份吗?
- 如何减小备份占用空间?
- 如何查看每个备份的大小?
- 如何查看备份中的数据?
- 备份会保存多久?
- 如何对资源进行周期性全备?
- 如何查询自己哪些资源还未配置备份?
- 数据备份时是否对网络带宽有要求?
- 一个存储库绑定多个资源时,备份保留策略如何生效?
- 数据库服务器备份和云数据库备份有什么区别?
- 容量类
- 恢复类
- 策略类
- 优化类
- 其他类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
通过自定义脚本实现其它Linux应用的一致性备份
场景介绍
在Linux下,如果有其它应用需要一致性备份,可以编写自己的冻结、解冻脚本,来实现应用的保护。自定义脚本需放置在/home/rdadmin/Agent/bin/thirdparty/ebk_user目录中,供Agent在备份过程中调用。
下面以一个虚构的应用appexample为例,来进行说明。
appexample是一款新的数据库,它对外提供了appexample -freeze与appexample -unfreeze两个命令来实现冻结与解冻。
用户需要开发自己的appexample_freeze.sh与appexample_unfreeze.sh脚本,供备份Agent调用以实现一致性备份。在备份过程中,会先调用appexample_freeze.sh脚本来冻结IO,冻结成功后,会进行磁盘的一致性快照激活,保证备份的数据是一致性的,最后再调用appexample_unfreeze.sh脚本解冻IO。
整体流程如图1所示:
开发冻结脚本
appexample_freeze.sh示例如下:
#!/bin/sh AGENT_ROOT_PATH=$1 #Agent程序调用脚本时,传入的的根目录,日志函数等会使用此变量,请不要改名 PID=$2 #Agent程序调用脚本时,传入的PID数字,用于结果的输出,请不要改名 . "${AGENT_ROOT_PATH}/bin/agent_func.sh"#引用脚本框架,提供了日志,加解密等功能 #结果处理函数,用于将结果写入到文件中,供脚本调用者获取返回值。 #入参 $1: 0表示成功,1表示失败 #无返回值 #RESULT_FILE在agent_func.sh中进行了定义 function ExitWithResult() { Log "[INFO]:Freeze result is $1." echo $1 > ${RESULT_FILE} chmod 666 ${RESULT_FILE} exit $1 } function Main() { Log "*********************************************************************" Log "[INFO]:Begin to freeze appexample." #查找appexample是否存在,如果appexample不存在,则返回0,退出 #在冻结IO步骤中,Agent程序会依次调用每个冻结脚本,如果一个失败,总体就会失败。所以为了防止干扰其他程序的冻结过程,找不到appexample时,应返回0 which appexample if [ $? -ne 0 ] then Log "[INFO]:appexample is not installed." ExitWithResult 0 fi #调用实际的冻结命令 appexample -freeze if [ $? -ne 0 ] then Log "[INFO]:appexample freeze failed." #冻结失败,记录结果并退出 ExitWithResult 1 fi Log "[INFO]:Freeze appexample success." #冻结成功,记录结果并退出 ExitWithResult 0 } Main
开发解冻脚本
appexample_unfreeze.sh示例如下:
#!/bin/sh AGENT_ROOT_PATH=$1 #Agent程序调用脚本时,传入的的根目录,日志函数等会使用此变量,请不要改名 PID=$2 #Agent程序调用脚本时,传入的PID数字,用于结果的输出,请不要改名 . "${AGENT_ROOT_PATH}/bin/agent_func.sh"#引用脚本框架,提供了日志,加解密等功能 #结果处理函数,用于将结果写入到文件中,供脚本调用者获取返回值。 #入参 $1: 0表示成功,1表示失败 #无返回值 #RESULT_FILE在agent_func.sh中进行了定义 function ExitWithResult() { Log "[INFO]:Freeze result is $1." echo $1 > ${RESULT_FILE} chmod 666 ${RESULT_FILE} exit $1 } function Main() { Log "*********************************************************************" Log "[INFO]:Begin to freeze appexample." #查找appexample是否存在,如果appexample不存在,则返回0,退出 #在解冻IO步骤中,Agent程序会依次调用每个解冻脚本,如果一个失败,总体就会失败。所以为了防止干扰其他程序的解冻过程,找不到appexample时,应返回0 which appexample if [ $? -ne 0 ] then Log "[INFO]:appexample is not installed." ExitWithResult 0 fi #调用实际的解冻命令 appexample -unfreeze if [ $? -ne 0 ] then Log "[INFO]:appexample freeze failed." #解冻失败,记录结果并退出 ExitWithResult 1 fi Log "[INFO]:Freeze appexample. success" #解冻成功,记录结果并退出 ExitWithResult 0 } Main
父主题: 通过自定义脚本实现数据库备份