2009년 8월 6일 목요일

MySQL 백업

백업의 종류는 일반적으로 다음과 같이 분류된다.

  • 물리 백업
  • 논리 백업
  • 콜드(오프라인) 백업
  • 핫(온라인) 백업
MySQL에서는 모든 방법을 지원한다.

운영체제 명령어로 복사
데이터베이스가 사용하고 있는 파일과 파일 시스템을 운영체제 명령어(cp, tar, cpio, dd, dump등)로 복사하는 방법이다. 이 경우 MySQL서버가 작업도중으로 전혀 변경작업이 없는 것을 전제로 한다.

MySQL서버를 멈춰놓고 작업하면 모순없이 복사가능하다. InnoDB경우는 데이터파일이외에도 로그파일과 my.cnf파일도 복사해 놓는다.

MySQL서버운용중에 복사하려면 FLUSH TABLES WITH READ LOCK을 거는 방법도 있다.
모든 테이블이 한번 flush되어 LOCK TABLES READ가 걸린다. lock중에는 테이블변경은 기다려진다.

REPLICATION로 백업
replication을 사용하면 slave서버에는 항상 master의 복사(백업)가 되어있다. 더더욱 백업전용 slave서버를 작성해두면 서버스를 정지시키지 않은채 풀 백업을 slave에 보존할 수 있게 된다.

MySQL slave서버는 멈추든지, 기동하는지 master에는 영향을 끼치지 않는다.
이 성징을 이용해서 slave서버를 멈추게한 다음 mysqldump나 cp등을 이용해서 전체 백업이 가능하다. 이것은 세대관리도 되게 된다.

slave서버를 멈추는데는 STOP SLAVE를 실행한다. 그 다음에 SHOW SLAVE STATUS로 현재의 바이너리 로그 위치를 확인해 두고 FLUSH TABLES WITH READ LOCK등을 실행해 풀 백업을 해두면 좋을 것이다.

slave 서버를 셧다운하는 방법도 있지만 셧다운하는 경우에는 주의가 필요하다.
왜냐하면 임시 테이블(CREATE TEMPORARY TABLE), 메모리 테이블( CREATE TABLE ... ENGINE=MEMORY) 내용은 셧다운하면 전부 없어지지 때문이다.

이런 메모리타입 테이블을 이용하는 SQL이 있으면 셧다운 한 다음 slave 를 재개했을 때 데이터가 이상해지게 된다.