강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

기존 테이블을 삭제후 백업된 파일로 복구하기 위한 백업방법

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

기존 테이블을 삭제후 백업된 파일로 복구하기 위한 백업방법




 

부제 : mysqldump문으로 데이터베이스 백업시에 각각의 create table문 앞에 drop table문 삽입하기

 

MYSQL의 백업유틸리티인 mysqldump로 백업을 하게 되면 테이블의 데이터를 생성하는 SQL문외에도 데이터베이스의 스키마(테이블 구조)를 생성하는 “create table” SQL문들이 들어 있습니다.   

 

 

 

 

따라서 mysqldump로 백업된 SQL파일을 이용하여 복구를 할 때에는 복구하고자하는 데이터베이스에 스키마(테이블구조)가 이미 존재할 경우에는 에러가 발생합니다.   

 

 

 

 

, 데이터복구시에 기존의 테이블들을 삭제하고 새로 테이블구조를 만들어서 백업데이터를 입력하는 방법으로 복구를 한다면 매우 편리할 것입니다.   

 

 

 

 

, mysqldump로 백업을 할 때에 --add-drop-table옵션을 사용하면 생성되는 백업파일내의 “create table”이라는 문장 바로 앞에 “drop table”문을 추가하게 됩니다.   

 

 

 , 이것의 의미는 백업된 파일로 복구를 할 때에 기존의 테이블을 완전히 삭제하고 테이블을 다시 만들어서 데이터를 입력하는 방법으로 복구를 하기 위함입니다.   

 

 

 

 

[주의사항]

이 방법을 이용하여 백업과 복구를 할 때에 주의 하실 점이 있습니다.   

 

 

 

--add-drop-table옵션을 사용하여 백업된 파일로 복구를 할 때에 기존의 테이블의 내용들이 모두 삭제되고 백업데이터로 재생성되므로 백업파일의 백업시점 이후와 복구시점 사이의 데이터는 모두 휘리릭~~~” 사라져 버린다는 점입니다.   

 

 

 이점 유념하시고 꼭 필요한 경우에 사용하시기 바랍니다.   

 

 

 

 

, 이제 직접 백업해 보도록 하겠습니다.   

 

 

 

아래의 예는 temp_db2라는 데이터베이스를 백업하여 temp_db2.sql파일에 저장합니다.   

 

 

  이때  --add-drop-table이라는 옵션을 사용하였으므로 생성되는 temp_db2.sql파일의 “create table”문들의 앞에는 모두 “drop table”이라는 테이블 삭제하는 SQL문이 추가되어 저장됩니다.   

 

 

 

 

[root@file bin]# pwd

/usr/local/mysql/bin

[root@file bin]#
[root@file bin]# ./mysqldump -u root -p --add-drop-table temp_db2 > temp_db2.sql

Enter password: ********

[root@file bin]#

[root@file bin]# ls -l temp_db2.sql

-rw-r--r--    1 root     root          416  2 14 12:32 temp_db2.sql

[root@file bin]#

 

이렇게 백업된 데이터를 잠시 살펴 보겠습니다.   

 

 

 아래의 예는 앞에서 백업명령어로 생성된 temp_db2.sql파일의 내용을 cat명령어로 살펴본 것입니다.   

 

 

 

 

[root@file bin]# cat temp_db2.sql

-- MySQL dump 9.08

--

-- Host: localhost    Database: temp_db2

---------------------------------------------------------

-- Server version       4.0.14

 

--

-- Table structure for table 'Demo_Domain'

--

 

DROP TABLE IF EXISTS Demo_Domain;

CREATE TABLE Demo_Domain (

  d_id smallint(7) unsigned NOT NULL auto_increment,

  d_name varchar(255) default NULL,

  d_type varchar(10) default NULL,

  d_sday varchar(20) default NULL,

  d_eday varchar(20) default NULL,

  d_email varchar(255) default NULL,

  d_register varchar(60) default NULL,

  hosting char(1) default NULL,

  h_name varchar(255) default NULL,

  h_homepage varchar(255) default NULL,

  h_price varchar(20) default NULL,

  h_sday varchar(20) default NULL,

  h_eday varchar(20) default NULL,

  h_memo text,

  PRIMARY KEY  (d_id)

) TYPE=MyISAM;

 

--

-- Dumping data for table 'Demo_Domain'

--

 

INSERT INTO Demo_Domain VALUES (1,'2000','.co.kr','2002/3/18','2004/3/18

','papa@superuser.co.kr','수퍼유저코리아','1','수퍼유저','www.2000.co.kr

','11000','2002/11/18','2002/11/18','');
…..
…..

 

위의 내용을 보시는 바와같이 “CREATE TABLE..”문 앞에는 “DROP TABLE IF EXISTS Demo_Domain;” 문이 존재합니다.   

 

 

 , 이렇게 백업된 파일로 복구를 하면 복구하고자하는 테이블이 존재할 경우에 이를 삭제하고 새로 생성하게 됩니다.   

 

 

 

 

아래의 예는 방금 백업된 내용으로 복구를 실행한 예입니다.   

 

 

  말씀드린바와 같이 기존의 테이블이 존재하는 경우라도 이를 삭제하고 새로 생성하여 복구하게 됩니다.   

 

 

 

 

[root@file bin]# ./mysql -u root -p temp_db2 < ./temp_db2.sql

Enter password: ********

[root@file bin]#

 

이와 같이 백업하는 방법은 복구하기에는 매우 쉬운 방법임에는 틀림이 없으나 기존 테이블데이터을 삭제하고 복구한다는 점에서 주의하셔야 합니다.   

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,033 명
  • 현재 강좌수 :  35,781 개
  • 현재 접속자 :  103 명