Post List

2015년 8월 17일 월요일

MongoDB Study #23 Backup & Restore , Utilities

1. Backup & Restore

1.1 MongoDump & MongoRestore

가장 대표적인 Backup Utility입니다.
전체 Backup , DB별 Backup, Caolection별 Backup 의 3가지 방법으로 Backup 및 Restore를 제공합니다.

특정 DB Backup 방법입니다.
C:\MongoDB>mongodump --db test // 해당 폴더 아래 dump/DB명 안에 File들이 생성됩니다.
2015-08-17T08:42:56.438+0900    writing test.system.profile to dump\test\system.profile.bson
2015-08-17T08:42:56.445+0900    writing test.system.indexes to dump\test\system.indexes.bson
2015-08-17T08:42:56.445+0900    writing test.emp to dump\test\emp.bson
2015-08-17T08:42:56.447+0900    writing test.system.profile metadata to dump\test\system.profile.metadata.json
2015-08-17T08:42:56.449+0900    done dumping test.system.profile (2 documents)
2015-08-17T08:42:56.450+0900    writing test.emp metadata to dump\test\emp.metadata.json
2015-08-17T08:42:56.451+0900    done dumping test.emp (14 documents)

특정 Collection을 Backup 해 보겠습니다.
C:\MongoDB\d>mongodump --db test --collection emp --out c:/mongodb/d // --out 옵션으로 File들이 생성될 Folder 지정이 가능합니다.
2015-08-17T08:50:59.723+0900    writing test.emp to c:\mongodb\d\test\emp.bson
2015-08-17T08:50:59.730+0900    writing test.emp metadata to c:\mongodb\d\test\emp.metadata.json
2015-08-17T08:50:59.732+0900    done dumping test.emp (14 documents)

조건문을 주어서 특정 Document만 Backup도 가능합니다.
C:\>mongodump --db test --collection emp --query "{ deptno : { $gte : 10 , $lt : 20 } }"
2015-08-17T08:56:00.523+0900    writing test.emp to c:\mongodb\c\test\emp.bson
2015-08-17T08:56:00.531+0900    writing test.emp metadata to c:\mongodb\c\test\emp.metadata.json
2015-08-17T08:56:00.532+0900    done dumping test.emp (3 documents)

전체 DB를 Backup해 보겠습니다.
C:\MongoDB>mongodump
2015-08-17T08:52:59.810+0900    writing test.system.indexes to dump\test\system.indexes.bson
2015-08-17T08:52:59.819+0900    writing test.system.profile to dump\test\system.profile.bson
2015-08-17T08:52:59.819+0900    writing test.emp to dump\test\emp.bson
2015-08-17T08:52:59.821+0900    writing test.system.profile metadata to dump\test\system.profile.metadata.json
2015-08-17T08:52:59.821+0900    done dumping test.system.profile (2 documents)
2015-08-17T08:52:59.822+0900    writing test.emp metadata to dump\test\emp.metadata.json
2015-08-17T08:52:59.824+0900    done dumping test.emp (14 documents)

이제 복구 방법들입니다.

먼제 전체 DB 복구입니다.
C:\MongoDB>mongorestore
2015-08-17T08:58:43.840+0900    using default 'dump' directory
2015-08-17T08:58:43.855+0900    building a list of dbs and collections to restore from dump dir
2015-08-17T08:58:43.859+0900    reading metadata file from dump\test\emp.metadata.json
2015-08-17T08:58:43.860+0900    reading metadata file from dump\test\system.profile.metadata.json
2015-08-17T08:58:43.860+0900    restoring test.emp from file dump\test\emp.bson
2015-08-17T08:58:43.860+0900    no indexes to restore
2015-08-17T08:58:43.861+0900    finished restoring test.system.profile (0 documents)
2015-08-17T08:58:43.865+0900    restoring indexes for collection test.emp from metadata
2015-08-17T08:58:43.868+0900    finished restoring test.emp (14 documents)
2015-08-17T08:58:43.868+0900    done

C:\MongoDB>mongorestore --objcheck --drop // Object 상태를 체크하여 이미 존재할 경우 삭제 후 복구 합니다.
2015-08-17T09:00:36.539+0900    using default 'dump' directory
2015-08-17T09:00:36.556+0900    building a list of dbs and collections to restore from dump dir
2015-08-17T09:00:36.558+0900    cannot drop system collection test.system.profile, skipping
2015-08-17T09:00:36.558+0900    reading metadata file from dump\test\system.profile.metadata.json
2015-08-17T09:00:36.559+0900    no indexes to restore
2015-08-17T09:00:36.559+0900    finished restoring test.system.profile (0 documents)
2015-08-17T09:00:36.560+0900    reading metadata file from dump\test\emp.metadata.json
2015-08-17T09:00:36.561+0900    restoring test.emp from file dump\test\emp.bson
2015-08-17T09:00:36.564+0900    restoring indexes for collection test.emp from metadata
2015-08-17T09:00:36.574+0900    finished restoring test.emp (14 documents)
2015-08-17T09:00:36.574+0900    done

DB단위 복구입니다. 이 경우에는 복구 파일 Folder를 반드시 지정해 주어야 합니다.
C:\MongoDB>mongorestore --db test dump/test
2015-08-17T09:02:50.190+0900    building a list of collections to restore from dump\test dir
2015-08-17T09:02:50.197+0900    reading metadata file from dump\test\emp.metadata.json
2015-08-17T09:02:50.198+0900    reading metadata file from dump\test\system.profile.metadata.json
2015-08-17T09:02:50.198+0900    restoring test.emp from file dump\test\emp.bson
2015-08-17T09:02:50.198+0900    no indexes to restore
2015-08-17T09:02:50.199+0900    finished restoring test.system.profile (0 documents)
2015-08-17T09:02:50.202+0900    restoring indexes for collection test.emp from metadata
2015-08-17T09:02:50.203+0900    finished restoring test.emp (14 documents)
2015-08-17T09:02:50.203+0900    done

Collecton 단위 복구 입니다. 이 경우네느 복구 파일 bson 파일을 지정해 주어야 합니다.
C:\MongoDB>mongorestore --db test --collection emp dump/test/emp.bson
2015-08-17T09:05:06.898+0900    checking for collection data in dump\test\emp.bson
2015-08-17T09:05:06.907+0900    reading metadata file from dump\test\emp.metadata.json
2015-08-17T09:05:06.907+0900    restoring test.emp from file dump\test\emp.bson
2015-08-17T09:05:06.969+0900    restoring indexes for collection test.emp from metadata
2015-08-17T09:05:06.970+0900    finished restoring test.emp (14 documents)
2015-08-17T09:05:06.970+0900    done

참고로 bson 파일 내의 Data를 분석 할 수 있는 BsonDump 라는 Utlity가 있습니다.
C:\MongoDB>bsondump dump/test/emp.bson
{"_id":{"$oid":"55d10eccd1610f52758ddbc4"},"deptno":20.0,"empno":7369.0,"ename":"SMITH","hiredate":"17-12-1980","job":"CLERK","sal":800.0}
...
{"_id":{"$oid":"55d10eccd1610f52758ddbd1"},"deptno":10.0,"empno":7934.0,"ename":"CLERK","hiredate":"23-01-1982","job":"CLERK","sal":1300.0}
2015-08-17T09:07:43.020+0900    14 objects found

C:\MongoDB>bsondump --type debug dump/test/emp.bson // Document 및 Field의 길이를 알 수 있습니다.
--- new object ---
        size : 123
                _id
                        type:    7 size: 17
                empno
                        type:    1 size: 15
                ename
                        type:    2 size: 17
                job
                        type:    2 size: 15
                hiredate
                        type:    2 size: 25
                sal
                        type:    1 size: 13
                deptno
                        type:    1 size: 16
--- new object ---
        size : 140
...

1.2 MongoImport & MongoExport

다른 DBMS와 MongoDB 사이의 Data Migration에 사용되는 Utility 입니다.

MongoExport를 이용해서 MongoDB 내의 Data를 csv 파일로 다운로드해 보겠습니다.
C:\MongoDB>mongoexport -d test -c emp -o emp.csv --type=csv -f empno,ename,job,hiredate,sal,deptno
2015-08-17T09:18:14.647+0900    connected to: localhost
2015-08-17T09:18:14.654+0900    exported 14 records
C:\MongoDB>more emp.csv
empno,ename,job,hiredate,sal,deptno
7369,SMITH,CLERK,17-12-1980,800,20
7499,ALLEN,SALESMAN,20-02-1981,1600,30
7521,WARD,SALESMAN,22-02-1981,1250,30
7566,JONES,MANAGER,02-04-1981,2975,20
7654,MARTIN,SALESMAN,28-09-1981,1250,30
7698,BLAKE,MANAGER,01-05-1981,2850,30
7782,CLARK,MANAGER,09-06-1981,2450,10
7788,SCOTT,ANALYST,13-06-1987,3000,20
7839,PRESIDENT,CEO,17-11-1981,5000,10
7844,TURNER,SALESMAN,08-09-1981,1500,30
7876,ADAMS,CLERK,13-06-1987,1100,20
7900,JAMES,CLERK,03-12-1981,950,30
7902,FORD,ANALYST,03-12-1981,3000,20
7934,CLERK,CLERK,23-01-1982,1300,10

MongoImport를 이용하여 다시 업로드해 보겠습니다.
C:\MongoDB>mongoimport --db test --collection emp --type csv --headerline --file emp.csv
2015-08-17T09:24:08.843+0900    connected to: localhost
2015-08-17T09:24:08.853+0900    imported 14 documents

 csv 파일뿐 아니라 json 타입도 가능합니다.
C:\MongoDB>mongoexport -d test -c emp -o emp.json --type=json
2015-08-17T09:26:31.155+0900    connected to: localhost
2015-08-17T09:26:31.163+0900    exported 14 records

C:\MongoDB>mongoimport --db test --collection emp --type json --file emp.json
2015-08-17T09:27:40.886+0900    connected to: localhost
2015-08-17T09:27:40.895+0900    imported 14 documents

1.3 CopyDatabase & CloneDatabase

CopyDatabase는 특정 Database를 다른 이름으로 복사를 할 때 사용하는 명령어 이고,
CloneDatabase는 다른DB Instance로 동일한 이름으로 Database를 복사랄 때 하용하는 명령어 입니다.

> db.copyDatabase ('test' , 'test2', 'Host명') // 동일 Host인 경우 Host명 생략 가능
> db.cloneDatabas('Host명') // 현재 사용중인 Database를 해당 Host로 복사 

2. 상태 Monitoring

2.1 MongoStat

MongoDB의 상태정보를 출력해주는 Utility 입니다.
- 초당 작업 회수
   insert, query, update, delete, getmore, command, flushes(Fsync Flush)

- Memory 크기 및 관련 상태 값
   mapped, vsize (Virtual Memory), res (Working Set Memory)
   faults (초당 개수) , locked (%) , idx miss (Index Missing %),

- Network 및 Client 작업 관련
   qr (Read 작업 Queue길이) , qw (Write 작업 Queue 길이),
   ar (Read 작업 Active Client 수) , aw (Write 작업 Active Client 수),
   netIn ( Received된 Network Traffic) , netOut (Send된 Network Traffic),
   conn(Open Connection 수),

- Replica Set 관련
   set (Replica Set 명칭),
   repl (Replication 유형 : M(Master) , SEC(Secondary) , REC(Recovering), UNK(Unknown) , SLV(Slave)

C:\MongoDB>mongostat --rowcount 50 // 50개까지만 출력해주는 Option. 없으면 계속 출력
insert query update delete getmore command flushes mapped  vsize   res faults qr|qw ar|aw netIn netOut conn     time
    *0    *0     *0     *0       0     1|0       0 240.0M 633.0M 68.0M     27   0|0   0|0   79b    10k    1 09:35:38
...

2.2 MongoTop

모든 Collection에 대한 Read/Write 현황에 대한 상태

C:\MongoDB>mongotop 5 // 매 5초마다 확인
2015-08-17T09:48:30.827+0900    connected to: 127.0.0.1
                     ns    total    read    write    2015-08-17T09:48:35+09:00
     admin.system.roles      0ms     0ms      0ms
   admin.system.version      0ms     0ms      0ms
...

2.3 Web Monotoring

Mongod 가동시 --rest 옵션을 사용한 경우 Web Brower에서 접속하여 Monitoring이 가능합니다.
Defult Port는 28017로 설정되어 있습니다.

아래와 같이 Server 가동 후
mongod --dbpath c:/mongodb/test --rest

Web Browser에서 http://localhost:28017 로 접속하면 확인이 가능합니다.

2.4 Log 수집 및 분석

mongod를 실행하면 console 창을 통해서 출력되는 log를 console 창에는 남기지 않고 file로 log를 남기는 옵션입니다.

mongod --dbpath c:/mongodb/test --logpath c:/mongodb/log/log.txt


댓글 없음:

댓글 쓰기