python+expect脚本实现自动备份数据,简单实用

python脚本如下:

#!/usr/bin/python
import  os,datetime
ip = iter(["1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8"])
port = iter(["3041","4227","2300","3212","2949","4502","3767","3405"])
passwd = iter(["11111","22222","33333","44444","55555","66666","77777","88888"])
path = iter(["/data0/backup/mysql/test/","/data1/backup_mysql/mysql/","/data0/backup/","/data0/backup/datalv/","/data1/backup/","/backup/data/","/data2/backup_mysql/mysql/","/backup/data/"])
today = "*" + str(datetime.date.today()).replace('-','').split()[0][2:] + "*"


for i in range(0,8):
    now_ip = next(ip)
    now_port = next(port)
    now_passwd = next(passwd)
    now_path = next(path)
    os.system("expect db_bak.ex %s %s '%s' %s%s"%(now_ip,now_port,now_passwd,now_path,today))
                                            

##############上面python脚本是将ip,端口,密码,sql存放路径,以及当天的日期(比如baidu20190617.sql,只获取0617)都定义到变量里生成迭代器(直接定义成列表也可以),然后循环,挨个取出信息定义成变量,然后调用expect脚本并且传参。

expect脚本如下:

#!/usr/bin/expect
set timeout 1800
set ip [lindex $argv 0]
set port [lindex $argv 1]
set passwd [lindex $argv 2]
set file_path [lindex $argv 3]
spawn scp -P $port [email protected].$ip:$file_path /root/all_backup/$ip/

expect {
        -re "connecting (yes/no)?" {
             send "yes\r";exp_continue
        }
        -re "password:" {
             send "$passwd\r";exp_continue
        }
        timeout {
        exit
        }
        eof {
        exit
        }
}
##########因为有的数据比较大,所以超时时间设置的长了点,定义ip,端口,密码,文件存放路径,然后执行命令,scp去拷贝远程服务器上的sql文件放入本地的/root/all_backup/1.{2,3,4,5}相对应的目录下,然后匹配,是不是第一次连接,是输入yes,不是则进入第二个匹配项,输入密码\r,\r是回车,不可缺少,timeout是判断是不是到了超时时间,如果是直接退出,eof判断是不是执行完了,是就退出。

可以加入crontab计划任务,每周执行,不过因为密码明码暴露在py脚本里了,所以我是没有加入到crontab里,给python脚本设置了个打开密码,每次执行前给密码去掉执行,执行完了再加上,防止服务器密码泄露。

给文件添加密码的方法:

vim db_bak.py #使用vim编辑python脚本

:X #冒号,大写的X,然后回车,会提示你输入密码,输入完需要确认密码,再输入一次

:wq #密码设置完了之后,需要保存退出,只能是wq保存退出,如果是x则不生效

现在就可以检验密码是否设置成功了

使用vi编辑不行,cat编辑也不行,只能使用vim编辑,进入会提示输入密码

输入密码后正常显示

使用:set key=   回车,然后:wq 这样就去掉密码了,再编辑不需要了,然后执行python db_bak.py就行了,不用了再设置密码。

很简单,但是很实用,有不足之处希望大家指出来,我会加以改进。

猜你喜欢

转载自blog.csdn.net/wojiuwangla/article/details/92589825