주기적으로 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 하기"의 내용을 스크립트로 실행시키는거죠.

2008/04/22 22:41 2008/04/22 22:41

Translate to English

번역 api에 대한 설명은 이 포스트를 참조하세요...

트랙백 주소 :: http://cybershin.x-y.net/tt/trackback/196

댓글을 달아 주세요


기본적인 방법은 "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해보면 정상적으로 동기화 된 것을 확인할 수 있을 것이다.

2008/01/31 10:07 2008/01/31 10:07

Translate to English

번역 api에 대한 설명은 이 포스트를 참조하세요...

트랙백 주소 :: http://cybershin.x-y.net/tt/trackback/143

댓글을 달아 주세요