数据库转拷贝和效验

    技术2022-07-11  110

    import paramiko import os import time import datetime “”" 默认是做的是转拷贝和校验,没有从数据库直接备份逻辑可自行添加 1.在~目录下创建 文件夹跟服务器ip对应 (***.***.***.123) 2.创建数据库,数据库名字是服务器ip最后一个子段+db格式(123db) “”"

    备份函数:备份数据库

    def remote_scp(host_ip,username,password): localtime = time.localtime(time.time()) if localtime.tm_mday == 1: last_month =datetime.date(datetime.date.today().year,datetime.date.today().month,1)-datetime.timedelta(1) copy_time =last_month.day

    else: copy_time=localtime.tm_mday - 1 #远程路径 remote_path = “/usr/lib/app/backup/mysqldata/db_%s.gz” % (copy_time) #本地路径 local_path = “/home/roo/{0}/db_{1}.gz” .format(host_ip, copy_time) try: #登陆服务器 t = paramiko.Transport((host_ip, 22000)) t.connect(username=username, password=password) except: print(“连接服务器错误”) print(time.localtime(time.time())) src = remote_path des = local_path try: #创建sftp传输管道,拷贝数据库 sftp = paramiko.SFTPClient.from_transport(t) sftp.get(src,des)

    except Exception as e: print(e) print("%s服务器文件拷贝失败"%(host_ip))

    finally: t.close()

    #校验函数:验证拷贝下来的数据库文件是否可用 def regain(): localtime = time.localtime(time.time()) if localtime.tm_mday == 1: last_month = datetime.date(datetime.date.today().year, datetime.date.today().month, 1) - datetime.timedelta(1) copy_time = last_month.day else: copy_time=localtime.tm_mday - 1 #复制数据库到临时目录并解压 a_path=os.path.join(“cp /home/roo/{0}/db_{1}.gz /tmp/db_{1}{2}.gz && cd /tmp/ && gzip -df db{1}{2}.gz").format(host_ip,copy_time,host_ip.split(’.’)[-1]) cp_file=os.system(a_path) if cp_file == 0: try: #将解压的文件恢复到本地数据库 a_path1=os.path.join("cd /tmp/ && mysql -u root -p’123456’ {1}db < db{0}{1}").format(copy_time,host_ip.split(’.’)[-1]) os.system(a_path1) except Exception as e: print(e) finally: tem_path = os.path.join("/tmp/db{0}_{1}”).format(copy_time, host_ip.split(’.’)[-1]) print(tem_path) os.remove(tem_path) else: print(“复制解压文件%s失败”% (a_path))

    if name == “main”: with open(“list.txt”, “r”) as f: while True: data = f.readline().split(’,’) if data == [’’]: break host_ip = data[0].strip() print(host_ip) password = data[1].strip() print(password) username=“root” remote_scp(host_ip,username,password) regain()

    Processed: 0.014, SQL: 9