Advertisement
Guest User

Untitled

a guest
Oct 31st, 2016
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import subprocess, paramiko, os
  4.  
  5.  
  6. def exec_remote_cmd(remote_host, remote_port, remote_user, remote_pass, remote_cmd):
  7. """ Connect to a server over SSH and execute commands """
  8.  
  9. # Uncomment line below if we need SSH to log stuff
  10. # paramiko.util.log_to_file('python_ssh.log')
  11.  
  12. ssh_client = paramiko.SSHClient()
  13. ssh_client.load_system_host_keys() # load known_hosts file of the user
  14. ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # auto-add keys of unknown hosts
  15. ssh_client.connect(remote_host, remote_port, remote_user, remote_pass)
  16.  
  17. stdin, stdout, stderr = ssh_client.exec_command(remote_cmd)
  18. output = stdout.read()
  19. ssh_client.close()
  20.  
  21. return output
  22.  
  23.  
  24. def dump_database(db_host, db_user, db_pass, db_name, sql_dump_filename):
  25. """ Dump MySQL DB with Drop Database commands to file """
  26.  
  27. args = ['mysqldump', '-h', db_host, '-u', db_user, '-p' + db_pass, '--add-drop-database', db_name]
  28.  
  29. with open(sql_dump_filename, 'w', 0) as f:
  30. p = subprocess.Popen(args, stdout=subprocess.PIPE)
  31. f.write(p.stdout.read())
  32. f.close()
  33.  
  34.  
  35. def send_dump(hostname, port, username, password, sql_file, dest_sql_file):
  36. """ Send sql file to remote host over SCP """
  37.  
  38. ssh = paramiko.SSHClient()
  39. ssh.load_system_host_keys() # load known_hosts file of the user
  40. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # auto-add keys of unknown hosts
  41. ssh.connect(hostname, port, username, password)
  42.  
  43. sftp = ssh.open_sftp()
  44. sftp.put(sql_file, dest_sql_file) # Send src to remote dest over scp
  45. sftp.close()
  46. ssh.close()
  47.  
  48.  
  49. def main():
  50. os.system('clear') # Clear screen before executing stuff
  51.  
  52. remote_host = "localhost"
  53. remote_port = 22
  54. remote_user = "user"
  55. remote_pass = "pass"
  56.  
  57. local_sql_file = "/home/mysql_dump.sql"
  58. remote_sql_file = "/home/dump.sql"
  59.  
  60. db_host = 'localhost'
  61. db_user = 'user'
  62. db_pass = 'pass'
  63. db_name = 'database_name'
  64. sql_dump_filename = '/home/mysql_dump.sql'
  65.  
  66. # Set command for importing SQL dump on remote server
  67. remote_cmd = "mysql -u user -ppass db_name < %s" % (remote_sql_file)
  68.  
  69. # Dump db from any host in local SQL file
  70. dump_database(db_host, db_user, db_pass, db_name, sql_dump_filename)
  71.  
  72. # Send SQL dump to remote server
  73. send_dump(remote_host, remote_port, remote_user, remote_pass, local_sql_file, remote_sql_file)
  74.  
  75. # Import SQL dump on remote server in DB
  76. exec_remote_cmd(remote_host, remote_port, remote_user, remote_pass, remote_cmd)
  77.  
  78.  
  79. if __name__ == "__main__":
  80. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement