-
### 특정 데이터베이스의 조건에 맞는 데이터만 백업하기Full-Stack/Back-end 2009. 1. 21. 12:27
### 특정 데이터베이스의 조건에 맞는 데이터만 백업하기
이번예에는 특정 데이터베이스 내에 실제 데이터들 가운데 특정조건에 맞는 데이터만을 백업하는 방법을 소개한다. 즉, 특정 데이터베이스 전체를 대상으로 한 것도 아니고 특정 데이터베이스의 테이블 전체를 대상으로하는 백업도 아닌 특정 테이블의 데이터(레코드값)들 가운데 조건에 해당하는 데이터(레코드값)만을 골라서 백업하는 방법을 의미한다.
이와같은 백업을 하려면 --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@file bin]# pwd /usr/local/mysql/bin
[root@file bin]#
[root@file bin]# ./mysqldump -u root -p --where="admin_id='admin'" temp_db2 Demo_DomainAdmin > ./temp_db2.sqlEnter password: ********
[root@file bin]#
[root@file bin]# ls -l temp_db2.sql
-rw-r--r-- 1 root root 14929 2월 14 12:25 temp_db2.sql
[root@file bin]#
위와 같이 백업된 temp_db2.sql파일의 내용을 보면 다음과 같다. 즉, 아래의 결과를 보면 데이터베이스 스키마와 --where조건에 맞는 데이터만이 저장되어 있다는 것을 알 수 있다.
[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_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','6fffffffffffff996d4',);
[root@file bin]#
이제 실무적인 관점에서 한가지만 더 알려드리겠다. 위의 방법에서 -t옵션을 추가하여 백업하면 데이터베이스 스키마를 제외한 실질적으로 --where조건에 맞는 순수한 데이터만을 저장할 수 있다.
아래의 예는 바로 앞의 mysqldump명령어에 -t옵션만을 추가한 것이다. 즉 위의 결과에서 생성된 데이터베이스 스키마를 제외한 순수한 --where조건에 맞는 데이터만을 저장하기 위한 백업이다.
[root@file bin]# pwd /usr/local/mysql/bin
[root@file bin]#
[root@file bin]# ./mysqldump -u root -p -t --where="admin_id='admin'" temp_db2 Demo_DomainAdmin > ./temp_db2.sqlEnter password: ********
[root@file bin]#
아래는 그 결과를 나타낸것이다. 확인해 보면 알겠지만 앞의 결과에서 데이터베이스 스키마를 생성하는 "CREATE TABLE"문이 생략되고 순수한 --where조건에 맞는 결과만이 저장되었다는 것을 확인 할 수 있다.
[root@file 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','6fffffffffffff996d4',);
[root@file bin]#
실제로 이와 같은 백업방법은 좀 까다로와 보이긴 하지만 잘 활용하면 실무에서 매우 강력한 힘을 발휘한다. 즉, 수많은 데이터들이 저장되어 있는 특정 테이블의 값들 가운데 특정 조건에 맞는 데이터만을 뽑아내려고 할 때에 가장 현실적이고 현명한 방법이기 때문이다.
#####################################################################
"리눅스포털 - 슈퍼유저코리아" 사이트를 참고로 다시 작성했습니다.
#####################################################################
[출처] http://blog.naver.com/yswon72댓글