Python์ Paramiko๋ฅผ ์ฌ์ฉํด์ ์๋ฒ์ ์ก์ธ์ค ํ์ฌ ์๋ฒ์ MySQL ํน์ ํ ์ด๋ธ์ dumpํด์ ํ์ผ์ PC๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๋ ์ฝ๋์ ๋๋ค.
import paramiko
import os
import time
# ์๋ฒ ์ ์ ์ ๋ณด
hostname = 'your_server_ip'
port = 22
username = 'your_username'
password = 'your_password'
# MySQL ์ ๋ณด
mysql_user = 'your_mysql_user'
mysql_password = 'your_mysql_password'
mysql_database = 'your_database'
mysql_table = 'your_table'
# ๋ก์ปฌ ํ์ผ ๊ฒฝ๋ก
local_file_path = os.path.join(os.getcwd(), f'{mysql_table}.sql')
# SSH ํด๋ผ์ด์ธํธ ์์ฑ ๋ฐ ์ฐ๊ฒฐ
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, port, username, password)
# 24์๊ฐ ๋์ 1์๊ฐ๋ง๋ค ๋คํ ๋ฐ ์ ์ก
for i in range(24):
# MySQL ๋คํ ๋ช
๋ น์ด ์คํ
dump_cmd = f'mysqldump -u {mysql_user} -p{mysql_password} {mysql_database} {mysql_table} > /tmp/{mysql_table}.sql'
stdin, stdout, stderr = ssh.exec_command(dump_cmd)
stdout.channel.recv_exit_status()
# SFTP ํด๋ผ์ด์ธํธ ์์ฑ ๋ฐ ํ์ผ ์ ์ก
sftp = ssh.open_sftp()
sftp.get(f'/tmp/{mysql_table}.sql', local_file_path)
sftp.close()
# 1์๊ฐ ๋๊ธฐ
time.sleep(3600)
# SSH ์ฐ๊ฒฐ ์ข
๋ฃ
ssh.close()
์ด ์ฝ๋๋ ์๋ฒ์ SSH๋ก ์ ์ํ์ฌ MySQL ๋คํ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ , ์์ฑ๋ ๋คํ ํ์ผ์ SFTP๋ฅผ ํตํด ๋ก์ปฌ ์ปดํจํฐ๋ก ์ ์กํฉ๋๋ค.
์ด ์ฝ๋๋ Python์ paramiko ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ SSH๋ก ์ ์ํ๊ณ ,
MySQL ๋คํ ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํน์ ํ ์ด๋ธ์ ๋คํํ ๋ค์,
์์ฑ๋ ๋คํ ํ์ผ์ SFTP๋ฅผ ํตํด ๋ก์ปฌ ์ปดํจํฐ๋ก ์ ์กํ๋ ์ฝ๋์ ๋๋ค.
์ด ์ฝ๋๋ 24์๊ฐ ๋์ 1์๊ฐ๋ง๋ค ๋ฐ๋ณตํ์ฌ ๋คํ ๋ฐ ์ ์ก ์์ ์ ์ํํฉ๋๋ค.
์ฝ๋์ ์๋จ์๋ ์๋ฒ ์ ์ ์ ๋ณด์ MySQL ์ ๋ณด๊ฐ ์ ์๋์ด ์์ต๋๋ค.
์ด ์ ๋ณด๋ค์ ์ฌ์ฉ์์ ์๋ฒ ํ๊ฒฝ์ ๋ง๊ฒ ์์ ํด์ผ ํฉ๋๋ค.
๊ทธ ๋ค์์ผ๋ก paramiko.SSHClient ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ connect ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ SSH๋ก ์ ์ํฉ๋๋ค.
๊ทธ ๋ค์์ผ๋ก for ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ 24๋ฒ ๋ฐ๋ณตํฉ๋๋ค.
๊ฐ ๋ฐ๋ณต์์๋ exec_command ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ MySQL ๋คํ ๋ช ๋ น์ด๋ฅผ ์คํํ๊ณ ,
open_sftp ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ SFTP ํด๋ผ์ด์ธํธ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ค์,
get ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋คํ ํ์ผ์ ๋ก์ปฌ ์ปดํจํฐ๋ก ์ ์กํฉ๋๋ค.
๊ฐ ๋ฐ๋ณต ์ฌ์ด์ time.sleep(3600)์ ์ฌ์ฉํ์ฌ 1์๊ฐ ๋์ ๋๊ธฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก close ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ SSH ์ฐ๊ฒฐ์ ์ข
๋ฃํฉ๋๋ค.