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

MySQL강좌34편: 특정데이터베이스의 조건에 맞는 데이터만 백업하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

MySQL강좌34: 특정데이터베이스의 조건에 맞는 데이터만 백업하기

 

이번에는 좀 특이한 백업방법을 소개하겠다.  즉 지금까지의 백업방법은 대부분 로컬서버나 또는 원격서버의 MYSQL의 특정데이터베이스를 백업대상으로 하거나 또는 특정데이터베이스의 테이블들, 또는 데이터베이스 스키마등만을 그 대상으로 백업하였다.

 

하지만 이번예에서는 특정데이터베이스 내에 실제데이터들 가운데 특정조건에 맞는 데이터만을 백업하는 방법을 소개할까한다.  즉 특정데이터베이스 전체를 대상으로 한 것도 아니고 특정데이터베이스의 테이블 전체를 대상으로하는 백업도 아닌 특정테이블의 데이터(레코드값)들 가운데 조건에 해당하는 데이터(레코드값)만을 골라서 백업하는 방법을 의미한다.

 

이와 같은 백업을 하려면 --where옵션을 사용하여 조건문을 지정해 주면 된다. 사용하는 형식은 다음과 같다.

 

 

사용형식 : mysqldump -u root -p --where=“WHERE조건문” DB명 테이블명 > 파일명

 

위의 형식에서 --where대신에 -w를 사용할 수도 있다.

 

아래의 예는 temp_db2데이터베이스내의 Demo_DomainAdmin이라는 테이블의 실제데이터들 가운데 admin_id필드값이 “admin”인 레코드만을 백업하여 temp_db2.sql파일에 저장하는 예이다.  --where=“admin_id=‘admin’”이라는 조건문 때문에 이와 같은 백업이 가능한 것이다.

 

[root@sulinux bin]# ./mysqldump -u root -p --where="admin_id='admin'" temp_db2  Demo_DomainAdmin > ./temp_db2.sql

Enter password: ********

[root@sulinux bin]#

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

-rw-r--r--    1 root     root          506  2 14 16:46 temp_db2.sql

[root@sulinux bin]#

 

위와같이 백업된 temp_db2.sql파일의 내용을 보면 다음과 같다.  즉 아래의 결과를 보면 데이터베이스 스키마와 --where조건에 맞는 데이터만이 저장되어있다는 것을 알 수 있다.

 

[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_DomainAdmin'

--

CREATE TABLE Demo_DomainAdmin (

  admin_id varchar(12) NOT NULL default '',

  admin_pass varchar(40) default NULL,

  PRIMARY KEY  (admin_id)

) TYPE=MyISAM;

--

-- Dumping data for table 'Demo_DomainAdmin'

--

-- WHERE:  admin_id='admin'

 

INSERT INTO Demo_DomainAdmin VALUES ('admin','6ffffffffffff996d4');

 

[root@sulinux bin]#

 

이제 실무적인 관점에서 한가지만 더 알려주도록 하겠다. 위의 방법에서 -t옵션을 추가하여 백업한다면 데이터베이스 스키마를 제외한 실질적으로 --where조건에 맞는 순수한 데이터만을 저장할 수 있다. 

 

아래의 예는 바로 앞의 mysqldump명령어에 -t옵션만을 추가한 것이다. 즉 위의 결과에서 생성된 데이터베이스 스키마를 제외한 순수한 --where조건에 맞는 데이터만을 저장하기 위한 백업이다.

 

[root@sulinux bin]# ./mysqldump -u root -p -t --where="admin_id='admin'" temp_db2  Demo_DomainAdmin > ./temp_db2.sql

Enter password: ********

[root@sulinux bin]#

 

아래는 그 결과를 나타낸 것이다. 확인해 보면 알겠지만 앞의 결과에서 데이터베이스 스키마를 생성하는 “CREATE TABLE”문이 생략되고 순수한 --where조건에 맞는 결과만이 저장되었다는 것을 확인 할 수 있다.

 

[root@sulinux bin]# cat temp_db2.sql

-- MySQL dump 9.08

--

-- Host: localhost    Database: temp_db2

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

-- Server version       4.0.14

--

-- Dumping data for table 'Demo_DomainAdmin'

--

-- WHERE:  admin_id='admin'

 

INSERT INTO Demo_DomainAdmin VALUES ('admin','6ffffffffffff996d4');

[root@sulinux bin]#

 

실제로 이와 같은 백업방법은 좀 까다로와 보이긴 하지만 잘 활용한다면 실무에서 매무 강력한 힘을 발휘한다. 즉 수많은 데이터들이 저장되어있는 특정테이블의 값들 가운데 특정조건에 맞는 데이터만을 뽑아내려고 할 때에 가장 현실적이고 현명한 방법이기 때문이다.

 

 

관련자료

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

공지사항


뉴스광장


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