更新时间:2025-02-27 gmt 08:00
通过自定义脚本实现其它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所示:
图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
相关文档
意见反馈
文档内容是否对您有帮助?
提交成功!非常感谢您的反馈,我们会继续努力做到更好!
您可在查看反馈及问题处理状态。
系统繁忙,请稍后重试
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨