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

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

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

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

 

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

 

 

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

 

 

 

 

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

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

 

[root@sulinux bin]# pwd

/usr/local/mysql/bin

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

Enter password: ********

[root@sulinux bin]#

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

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

[root@sulinux bin]#

 

 

 

 

 

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

 

 

 

 

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

 

 

 

 

 

 

[root@sulinux 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@sulinux bin]# ./mysql -u root -p temp_db2 < ./temp_db2.sql

Enter password: ********

[root@sulinux bin]#

 

 

 

 

 

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

 

 

 

 

 

 

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,156 명
  • 현재 강좌수 :  36,513 개
  • 현재 접속자 :  297 명