Python实现mysql备份及恢复

Python实现mysql备份及恢复

# mysqlbackup
import subprocess
from datetime import datetime

def shell(cmd, timeout=10, line_to_list=False, ignore_error=False):
    print('INPUT: [{}]'.format(cmd))
    try:
        output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True, timeout=timeout)
        output = str(output, encoding='utf-8').strip()
        return True, [o.strip() for o in output.split('\n')] if line_to_list else output
    except subprocess.CalledProcessError as e:
        return False, str(e.stderr or b'', encoding='utf-8')
    except subprocess.TimeoutExpired as e:
        return False, 'timeout({})'.format(e.timeout)
    except Exception as e:
        return False, str(e)

if __name__ == '__main__':
    time = datetime.now().strftime("%Y%m%d%H%M%S")
    #主机房MySQL连接信息
    mysql_pod_name="mysql-mysql-0"
    host = "mysql-mysql"
    user = "root"
    port = "3306"
    password = "Hello1234"
    sqlfile = "all-databases_" + time + ".sql"
    #备机房IP
    backup_ip = "10.90.10.61"
    cmd = "kubectl exec {} -- /usr/bin/mysqldump -h {} -u {} -P {} -p{} --all-databases > /{} ".format(mysql_pod_name,host,user,port,password,sqlfile)
    success, output = shell(cmd)
    print(success, output)
    cmd = "kubectl cp default/{}:/{} /{}".format(mysql_pod_name,sqlfile,sqlfile)
    success, output = shell(cmd)
    print(success, output)
    cmd = "scp -r /{} root@{}:/".format(sqlfile, backup_ip)
    success, output = shell(cmd)
    print(success, output)


# mysqlrestore
import subprocess

def shell(cmd, timeout=10, line_to_list=False, ignore_error=False):
    print('INPUT: [{}]'.format(cmd))
    try:
        output = subprocess.check_output(cmd, stderr=subprocess.STDOUT, shell=True, timeout=timeout)
        output = str(output, encoding='utf-8').strip()
        return True, [o.strip() for o in output.split('\n')] if line_to_list else output
    except subprocess.CalledProcessError as e:
        return False, str(e.stderr or b'', encoding='utf-8')
    except subprocess.TimeoutExpired as e:
        return False, 'timeout({})'.format(e.timeout)
    except Exception as e:
        return False, str(e)

if __name__ == '__main__':
    #备机房MySQL连接信息
    mysql_pod_name="mysql-mysql-0"
    host = "mysql-mysql"
    user = "root"
    port = "3306"
    password = "Hello1234!"
    #选择需要恢复的sql备份版本
    sqlfile = "all-databases.sql"
    cmd = "kubectl cp /{} default/{}:/{} ".format(sqlfile,mysql_pod_name, sqlfile)
    success, output = shell(cmd)
    print(success, output)
    cmd = "kubectl exec {} -- /usr/bin/mysql -h {} -u {} -P {} -p{} < /{} ".format(mysql_pod_name,host,user,port,password,sqlfile)
    success, output = shell(cmd)
    print(success, output)

猜你喜欢

转载自blog.csdn.net/Wemesun/article/details/129377243