2009년 8월 17일 월요일

MySQL 백업3

mysqlhotcopy


1. 복사할 곳이 디렉토리인 경우
mkdir 복사할곳디렉토리/데이터베이스명
LOCK TABLES 테이블 READ;
FLUSH TABLES;
cp -p 테이블명.{frm, MYD, MYI} 복사할곳디렉토리/데이터베이스명/
UNLOCK TABLES;

2.복사할 곳이 데이터베이스인 경우
mkdir datadir/데이터베이스명
LOCK TABLES 테이블 READ;
FLUSH TABLES;
cp -p 테이블명.{frm, MYD, MYI} datadir/데이터베이스명/
UNLOCK TABLES;

3.복사할 곳이 지정이 없는 경우
mkdir datadir/데이터베이스명_copy
LOCK TABLES 테이블 READ;
FLUSH TABLES;
cp -p 테이블명.{frm, MYD, MYI} datadir/데이터베이스명_copy/
UNLOCK TABLES;

데이터베이스명은 복사하는 테이블이 포함되어있는 데이터베이스명이다.

4.옵션
--addtodest : 백업할 곳이 존재하는 경우 멈추지 않고 덮어 씌운다.
--allowold : 백업할 곳이 존재하는 경우 임시로 옮겨놓고 백업이 다 끝난 후 임시로 옮겨논 곳을 지운다.
--keepold : 백업한 곳이 존재하는 경우 임시로 옮겨놓고 백업을 진행한다.
--checkpoint 데이터베이스명.체크포인트테이블명 : 지정한 테이블에 작업기록을 남긴다. 테이블에는 다음과 같은 필드가 필요한다.
time_stamp timestamp not null
src varchar(32)
desc varchar(60)
msg varchar(255)
이 옵션을 지정하면 처음에 이 테이블에 대해서 SELECT가 실행된다.
--flushlog : 테이블 록을 건 다음 FLUSHLOGS를 실행한다.
--method={cp|scp}: scp는 아직 Alpha레벨
--noindices : 인덱스파일 전부를 복사하지 않는다. MYI파일 앞부분 2048바이트까지만 복사한다. myisamchk로 MYI는 작성가능
-q, --quit : 에러만 출력한다.
--record_log_pos 데이터베이스명.체크포인트테이블명 : 복사하기 전에 SHOW MASTER STATUS, SHOW SLAVE STATUS로 얻어진 로그 위치를 지정한 테이블에 기록한다. 테이블에는 다음과 같은 필드가 필요한다.
CREATE TABLE 테이블명 {
host varchar(60) NOT NULL,
time_stamp timestamp(14) NOT NULL,
log_file varchar(32) default NULL, -- SHOW MASTER STATUS의 File
log_pos int(11) default NULL, -- SHOW MASTER STATUS의 Position
master_host varchar(60) NULL, -- SHOW SLAVE STATUS의 master_host
master_log_file varchar(32) NULL, -- SHOW SLAVE STATUS의 master_log_file
master_log_pos int NULL, -- SHOW SLAVE STATUS의 master_log_pos
PRIMARY KEY(host)
}
이 옵션을 지정하면 처음에 이 테이블에 대해서 SELECT가 실행된다.
--resetmaster : 테이블 록을 건 후 복사하기 전에 RESET MASTER를 실행한다.
--resetslave: 테이블 록을 건후 복사하기 전에 RESET SLAVE를 실행한다.
--regexp 패턴 : 패턴에 맞는 데이터베이스를 복사한다.
--regexp /패턴1/./패턴2/ : 패턴1에 맞는 데이터베이스에 , 패턴2에 맞는 테이블을 복사한다.
--suffix= : 기본값은 --suffix=_copy 백업 이름의 접미사.

-u, --user= : 사용자명
-h, --host= : 호스트지정
-p, --password= : 패스워드 지정
-P, --port= : 포트번호 지정
-S, --socket= : 소켓파일지정

--debug : 상세한 정보를 표시
-n, --dryrun : 실제로는 실행하지 않음.