Python实现mysql备份及恢复
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_pod_name="mysql-mysql-0"
host = "mysql-mysql"
user = "root"
port = "3306"
password = "Hello1234"
sqlfile = "all-databases_" + time + ".sql"
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)
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_pod_name="mysql-mysql-0"
host = "mysql-mysql"
user = "root"
port = "3306"
password = "Hello1234!"
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)