2009년 8월 23일 일요일

MySQL 리스토어 (복구)

운영체제의 명령어로 복사
운영체제의 명령어로 파일 백업을 한 경우는 같은 형식으로 파일을 복사해서 되돌린다.
작업전에는 MySQL서버는 정지시켜둔다.

InnoDB의 경우는 데이터파일의 기술(파일 개수, 순번, 사이즈)를 백업과 동시에 할 필요가 있다.

innodb_data_file_path, innodb_log_files_in_group, innodb_log_files_size의 기술에 주의해야한다.

LOAD DATA, mysqlimport(mysqldump로 SQL문이 아닌 형태로 백업한 경우)
mysqldump의 다음 옵션을 사용해서 SQL문이 아닌 다른 형태(CSV등)로 데이터를 백업한 것을 리스토어하는 SQL문이 LOAD DATA이다.

--tab, --fields-terminated-by=, --fields-enclosed-by=, --fields-optionally-enclosed-by=, --fields-escaped-by=, --lines-terminated-by=

mysqlimport라는 명령어로도 리스토어 가능하다. mysqlimport는 내부에 LOAD DATA문을 실행하고 있다.

◎LOAD DATA
LOAD DATA를 사용할 때에는 다음을 주의해야한다.
  • 테이블은 별도 작성해둘 것
  • 실행에는 FILE권한이 필요.
◎mysqlimport명령어
mysqlimport는 LOAD DATA문을 사용해서 파일의 내용을 테이블에 흘려 넣는다.
필드구분자등의 옵션은 mysqldump을 실행했을 때와 일치시켜줘야한다.
구문은 다음과 같다.

mysqlimport [옵션] 데이터베이스명 파일명

mysqlimport는 my.cnf의 [mysqlimport] [client]그룹을 읽어들인다.

mysql명령어(mysqldump에서 SQL문으로 백업한 경우)
mysqldump로 출력된 내용은 보통 SQL문이다. SQL문이라면 mysql명령어로 리스토어가 가능하다.

mysql명령어로 리스토어
shell$ mysqldump --default-character-set=binary --hex-blob test > test_dump.sql
shell$ mysql --default-character-set=binary test < test_dump.sql

캐릭터셋 지정은 mysqldump, mysql명령어가 같아야한다.

RESTORE TABLE
BACKUP TABLE로 백업한 경우, 리스토어에는 RESTORE TABLE을 사용한다.
BACKUP TABLE과 마찬가지로 MySQL 5.2이후에는 없어질 예정이다. MyISAM테이블에서만 동작한다.
구문은 다음과 같다.

RESTORE TABLE 테이블명[,테이블명]... FROM '/저장될 디렉토리'

디렉토리는 풀 패스로 지정해야한다. 지정된 디렉토리에서 .frm과 .MYD파일을 복사해서 .MYI파일을 작성한다.