주기적으로 mysql db를 백업할 일이 생기는데,
백업 후에 replication을 다시 설정하려면 이쪽저쪽 서버에 접속을 해야합니다.

그러한 이유로 python 상에서 ssh 접속을 어떻게 하나 찾아봤더니,
paramiko라는게 있더군요.

#SSH 접속하기. - by using paramiko
import paramiko
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect(HOST, username=USER, password=PASSWORD)
stdin, stdout, stderr = client.exec_command('ls -l')
print stdout.read()
client.close()

위의 스크립트를 이용해서 ssh에 접속하고 나머지는 다음의 순서로 해결할 수 있겠습니다.
물론 이건 incremental하게 backup & sync하는건 아니고 통짜로 무쉭하게 할 경우에 대한 이야기입니다.

1. get master-status
2. dump
3. rsync
4. ssh open
4.1 drop db
4.2 import
4.3 slave setup & start
4.4 ssh close

1번에서 master-status를 가져오는건 commands.getoutput()을 이용하면 됩니다.
즉, "Master에 기존 데이터가 있는 상태에서 replication 하기"의 내용을 스크립트로 실행시키는거죠.

AND


기본적인 방법은 "Mysql Replication 설정하기"와 동일하며,
해당글의 '6번 Slave'를 시작하기 전에 다음의 작업을 추가로 하면 된다.

1. Master에서 모든 테이블을 flush.

mysql> FLUSH TABLES WITH READ LOCK;

2. mysqldump를 이용해서 Master의 내용을 dump.

shell> mysqldump --all-databases --lock-all-tables >dbdump.db

권한이 모자라면 -u root -p 등의 옵션을 추가로 주면 된다.

3. Slave를 잠시 멈춘다.

기존에 돌아가던 slave가 있는 경우에만 해당된다.

mysql> STOP SLAVE;

4. Master로부터 dump한 dbdump.db 파일을 rsync등으로 가져와서, Import 시킨다.
   
shell> mysql < dbdump.db

이번에도 역시 권한이 모자라면 -u root -p 등의 옵션을 추가로 주면 된다.

5. Slave를 재시작.

mysql> START SLAVE;

Slave의 db를 select해보면 정상적으로 동기화 된 것을 확인할 수 있을 것이다.

AND