mysqldump로 백업시에 where조건에 맞는 데이터만 백업하기
mysqldump로 백업시에 where조건에 맞는 데이터만 백업하기
이번에는 좀 특이한 백업방법을 소개해 드리겠습니다.
즉, 지금까지의 백업방법은 대부분 로컬서버나 또는 원격서버의 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@file bin]# ./mysqldump -u root -p --where="admin_id='admin'" temp_db2 Demo_DomainAdmin > ./temp_db2.sql
Enter password: ********
[root@file bin]#
[root@file bin]# ls -l temp_db2.sql
-rw-r--r-- 1 root root 506 2월 14 16:46 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','6ffffffffffff996d4');
[root@file bin]#
이제 실무적인 관점에서 한가지만 더 알려드리겠습니다.
위의 방법에서 -t옵션을 추가하여 백업하신 다면 데이터베이스 스키마를 제외한 실질적으로 --where조건에 맞는 순수한 데이터만을 저장할 수 있습니다.
아래의 예는 바로 앞의 mysqldump명령어에 -t옵션만을 추가한 것입니다.
즉 위의 결과에서 생성된 데이터베이스 스키마를 제외한 순수한 --where조건에 맞는 데이터만을 저장하기 위한 백업입니다.
[root@file bin]# ./mysqldump -u root -p -t --where="admin_id='admin'" temp_db2 Demo_DomainAdmin > ./temp_db2.sql
Enter 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','6ffffffffffff996d4');
[root@file bin]#
실제로 이와 같은 백업방법은 좀 까다로와 보이긴 하지만 잘 활용하신다면 실무에서 매무 강력한 힘을 발휘합니다.
즉 수많은 데이터들이 저장되어 있는 특정 테이블의 값들 가운데 특정 조건에 맞는 데이터만을 뽑아내려고 할 때에 가장 현실적이고 현명한 방법이기 때문입니다.
출처 : https://www.linux.co.kr/bbs/board.php?bo_table=lecture&wr_id=3060