193
云计算
负载均衡
产品简介
产品价格
快速入门
用户指南
实践操作
常见问题
购买指南
云服务器
产品简介
计费规则
购买指导
控制台使用指南
常见问题
云数据库
产品简介
计费规则
购买指导
快速入门
连接实例
控制台使用指南
对象存储
产品简介
控制台使用指南
程序员百科
Python
通过自定义脚本实现其它Linux应用的一致性备份教程

产品推荐:

1、安全稳定的云服务器租用,2核/2G/5M仅37元,点击抢购>>>

2、高防物理服务器20核/16G/50M/200G防御仅350元,点击抢购>>>

3、百度智能建站(五合一网站)仅880元/年,点击抢购>>> 模板建站(PC+手机站)仅480元/年,点击抢购>>>



点击这里注册天翼云特邀VIP帐号,立即体验云服务备份>>>


本章节介绍如何通过自定义脚本实现其它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。

整体流程如下图所示:

  • 数据库备份流程图

3.png

开发冻结脚本

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


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!