Posted on 2004/01/28 19:06
Filed Under 리눅스기술문서/팁앤테크 조회수: view 5176

<<< MySQL 백업과 복구  >>>


DataBase가 정상적으로 사용이 될때, 만약의 경우를 대비해 DB를 백업해
두어야 합니다.
여기서는 MySQL의 사용시 DB Backup의 한가지인 mysqldump 명령의 사용법 및
백업해둔 내용을 다시 복구하는 방법을 설명합니다.

(1) mysql에 설치된 디렉토리찾기

% which mysql
/usr/local/mysql/bin/mysql
% whereis mysql
mysql: /usr/local/mysql

[ns4.kobis.net:/home/mcse]% ls /usr/local/mysql/bin
apache_1.3.9.tar.gz mysql mysqlaccess mysqlshow
comp_err mysql_fix_privilege_tables mysqladmin perror
isamchk mysql_install_db mysqlbug replace
isamlog mysql_setpermission mysqldump resolveip
msql2mysql mysql_zap mysqlimport safe_mysqld

위에서 보는바와 같이 mysql/bin 디렉토리를 살펴보면, mysql에서 사용되는
명령어들을 살펴볼수가 있다. 여기서는 mysqldump라는 명령어만을 설명하기로 한다.

MySQL은 최초인스톨시에 세가지 DB가 생성이 된다.
user,db,test 등이 그것이다.
user와 db 는 사용자생성?사용자데이터베이스 생성에 필요한 필수적인 구성요소이다.
test는 말그대로 테스트용으로 생성이 된 것이다.

mysql/bin 디렉토리에 path가 걸려있지 않으면, 다음과 같이 절대패스를 지정해야 한다.


(2) 사용자데이터베이스 백업받기(mysqldump)

Database사용자명과 패스워드가 test이고 사용자DB명이 super일때,
super라는 데이터베이스를 통째로 현재디렉토리의 super.db.dump로 백업을 받는다.

% /usr/local/mysql/bin/mysqldump -utest -ptest super > ./super.db.dump

그러면 현재디렉토리에 super.db.dump라는 파일에 super라는 데이터베이스의 모든 내용이
백업된다. 파일의 형식은 아스키텍스트이므로 vi를 열어서 확인이 가능하다.
즉,super라는 사용자데이터베이스 내에 있는 모든 테이블의 구조와 내용이 텍스트형태로
저장이 되는 것이다.

(3) 사용자데이터베이스내에 있는 특정 테이블만 백업받기

모든 테이블이 아니라, 특정한 몇개의 테이블만 백업을 원한다면, 다음과 같이 할수있다.
super데이터베이스 내에 있는 table1이라는 테이블만 백업을 원한다면 다음의 형식으로
명령어를 사용하면 간단하다.

% /usr/local/mysql/bin/mysqldump -utest -ptest super table1 > ./super.table1.dump

(4) 백업된 데이터베이스 복구하기(mysql)

백업된 텍스트파일을 가지고 데이터베이스 혹은 테이블을 복구하기 위해서는 다음과 같이
사용하면 된다.

% /usr/local/mysql/bin/mysql -utest -ptest super < ./super.db.dump
% /usr/local/mysql/bin/mysql -utest -ptest super < ./super.table1.dump

주의할 점은 기존에 생성된 테이블을 모두 삭제(drop)해야 한다는 것이다.
왜냐하면, 위의 백업된 텍스트파일에는 데이터의 복구(insert) 뿐만 아니라 테이블의
새로운 생성(create)을 위한 스크립트도 포함이 되어 있기 때문이다.
단지 복구를 원하는 테이블을 사용자데이터베이스내에서 Drop시켜주면 된다.
복구하는 테이블명이 test1이라고 한다면 "drop table test1;" 이라는 명령어를
사용하면 된다.


<팁> 데이터베이스내에 있는 특정테이블의 구조변경이 요구될때....
어느날 갑자기 테이블에 항목하나를 추가하고자 하는 경우가 생길수가 있다.
이때 기존 테이블자체를 삭제하고 새롭게 생성을 해야 원하는 요구를 수용할 수 있다.
그렇다면 기존의 데이터를 보존하면서 테이블을 변경할 수 있는 방법을 모색해야 한다.
이때는 위의 방법으로 테이블구조와 데이터를 백업해 둔 다음에, 백업된 파일을 가지고
변경작업을 진행해야 한다.
이때 주의할 점은 기존의 데이터가 다시 복구되기 위해서는 변경된 테이블의 구조를
수용할 수 있도록 되어야 한다는 것이다.
--------------------------------------------------------
# MySQL dump 6.0
#
# Host: localhost Database: nos
#--------------------------------------------------------
# Server version 3.22.25

#
# Table structure for table 'member'
#
CREATE TABLE member (
id varchar(10) DEFAULT '' NOT NULL,
passwd varchar(10) NOT NULL,
PRIMARY KEY (id)
);

#
# Dumping data for table 'ad'
#

INSERT INTO member VALUES ('webmaster','xxxx');
---------------------------------------------------------
보기에서 처럼, 최초의 항목 id,passwd 에 name항목을 새롭게 추가할 이유가 생겼을땐,
위의 테이블구조를 수정하면 간단하게 해결된다. 그러나 문제는 insert를 해야 할
테이터이다. insert문은 vaules구문뒤에 테이블항목에 맞는 갯수의 데이터항목이 기술되어야
한다.
그렇지 않으면 에러가 발생한다. 해결할 수 있는 방법은 insert문의 구조를 갱신하는 것이다.


ex1)
insert into member (id,passwd)
values('webmaster','xxxx');

ex2)
insert into member
values('webmaster','xxxx','');

위처럼 데이터가 문제로 되지 않는다면 테이블만 갱신하면 간단하게 해결될 것이다.

Writer profile
author image
-아랑 -
2004/01/28 19:06 2004/01/28 19:06

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우
Twitter :@muchunalang

Counter

• Total
: 4125852
• Today
: 121
• Yesterday
: 1375