小花狸监控之异地备份

小花狸监控可以嵌入备份的脚本.
一旦本地备份完成,向集中监控服务器发送信息,
集中监控服务器将数据拉回,实现异地备份.

数据拉回采用了expect脚本,模拟交互方式输入密码

/home/lihuilin/golang/src/backup.sh

#!/usr/bin/expect
##########################################################  
#     1.service ip  
#     2.User  
#     3.userPassword  
#     4.localPath  [本地路径]  
#     5.serverPath [server端路径]  
#返回值:  
#     0  成功  
#     1  参数个数不正确  
###########################################################  
 
proc usage {} {  
        regsub ".*/" $::argv0 "" name  
        send_user "Usage:\n"  
        send_user "$name serviceip  User userPassword serverPath localPath\n"  
        exit 1  
}  
    
## 判断参数个数  
if {[llength $argv] != 5} {  
        usage  
}  
 
 
#设置变量值  
set severip [lindex $argv 0]  
set User [lindex $argv 1]  
set userPassword [lindex $argv 2]  
set serverPath [lindex $argv 3]  
set localPath [lindex $argv 4]  
      
#定义变量标记rsync连接时是否输入yes确认  
set inputYes 0  
 
#rsync -avz /etc/ 192.168.15.234:/home/7_8  
spawn rsync -avz $User@$severip:$serverPath $localPath
    expect {  
    -nocase -re "yes/no" {  
        send -- "yes\r"   
            set inputYes 1     
    }  
    -nocase -re "assword: " {  
        send -- "$userPassword\r"  
                    interact  
    }  
    -nocase -re "Connection refused" {  
        send_error "Sftp services at ${ftpServerIp} is not active.\n"  
            exit 2  
    }  
    timeout {  
        send_error "Connect to sftp server ${ftpUser}@${ftpServerIp} timeout(10s).\n"  
            exit 8  
    }  
    eof
}  
 
 
#如果输入了yes确认,输入密码  
if {$inputYes==1} {  
        expect {  
            -nocase -re "assword: " {  
            send -- "$userPassword\r"  
            interact  
        }  
    }   
}  

expect eof

使用golang调用脚本 Backup.go
package main

import (
    "github.com/codeskyblue/go-sh"
    "log"
)

type BackupInfo struct {
    User      string
    Pwd       string
    Path      string
    LocalAddr string
}

func NewBackupInfo(localAddr, user, pwd, path string) *BackupInfo {
    backup := &BackupInfo{}
    backup.LocalAddr = localAddr
    backup.User = user
    backup.Pwd = pwd
    backup.Path = path
    return backup
}

func Backup(backupinfo *BackupInfo) {
    s := sh.NewSession()
    //s.ShowCMD = true
    s.SetEnv("/usr/bin", "/bin")
    cmd := s.Command("/usr/bin/expect", "/home/lihuilin/golang/src/backup.sh", backupinfo.LocalAddr, backupinfo.User, backupinfo.Pwd, backupinfo.Path, "/tmp")
    result, err := cmd.Output()
    if err != nil {
        log.Println(err.Error())
    }
    log.Println(string(result))

}

func main() {
    backupinfo := NewBackupInfo("192.168.1.70", "root", "root", "/tmp/data")
    Backup(backupinfo)
}



参考:
http://www.cnblogs.com/gylei/archive/2013/05/11/3072331.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1477709/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29254281/viewspace-1477709/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MSSQLSERVER2012 是微软推出的一款关系型数据库管理系统,它支持异地备份来保护数据库的安全性和可用性。异地备份是指将数据库备份文件存储在与数据库服务器不同的地理位置上,以防止单点故障或灾难性事件导致数据丢失。 在 MSSQLSERVER2012 中,可以通过以下步骤来进行异地备份: 1. 配置备份设备:首先,需要在目标地点配置一个备份设备,可以是磁盘、网络共享文件夹或磁带等。这个设备将用于存储备份文件。 2. 创建备份任务:使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T-SQL) 命令,创建一个备份任务。在备份任务中,指定要备份的数据库、备份类型(完整备份、差异备份或日志备份)以及备份设备的位置。 3. 安排备份计划:为了自动执行备份任务,可以使用 SQL Server 代理来安排备份计划。通过 SQL Server 代理,可以设置备份任务的执行时间和频率。 4. 监控和验证备份:定期监控备份任务的执行情况,并验证备份文件是否成功生成。可以使用 SSMS 的“查看历史记录”功能来查看备份任务的执行历史。 5. 将备份文件传输到目标地点:将备份文件从源数据库服务器传输到目标地点。可以使用网络传输工具(如 FTP、SCP)或物理传输介质(如硬盘、磁带)来完成传输。 6. 恢复备份:在目标地点的数据库服务器上,使用 MSSQLSERVER2012 的恢复功能将备份文件还原为可用的数据库。可以选择完整恢复、差异恢复或日志恢复,具体取决于备份类型和需求。 需要注意的是,异地备份需要考虑网络带宽、传输速度和数据安全等因素。此外,还应定期测试备份文件的可用性和恢复过程,以确保备份策略的有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值