Posting

Machbase의 최신 소식을 지금 만나보세요

[MACHBASE 기초] Incremental Backup

마크베이스 6 버전부터 Tag 테이블 및 Log테이블에 대해서 증분 백업 기능이 추가되었다.
백업을 수행하고 사용자가 필요할 때 백업한 데이터를 mount 기능을 통해서 특정 시점의 데이터를 조회하고자 할 때나
데이터베이스에 문제가 발생한 경우에 마크베이스를 새로 설치하고 restore 기능을 통해 백업한 데이터를 조회 가능하다.

Incremental Backup

증분 백업은 데이터베이스의 전체 백업 이후에 변경되거나 추가된 데이터만 선택적으로 백업하는 방식이다.
전체(full)백업에 비해 데이터량이 적고 소요 시간이 짧다는 장점이 있다.

증분백업시 기준이 되는 백업(이하 기준백업)과 백업 대상이 다르면 작동하지 않으며
기준백업과 비교하여 변경되거나 추가된 데이터를 백업한다.

Tag 테이블의 Incremental Backup을 수행해보겠다.
(참고로 Log 테이블에 대해서도 Incremental Backup 기능을 지원한다.)

Tag 테이블을 생성한다.

Mach> CREATE TAGDATA TABLE TAG(name varchar(32) primary key, time datetime basetime, value double summarized);

테스트 데이터의 경우 아래 append 프로그램 링크를 이용하기 바란다.
append.c

append 프로그램을 이용하여 2020년 1월 data를 하루에 1천만건씩 3억1천만건을 입력하였다.
1월 데이터를 tag table 백업 기능을 사용하여 full백업을 수행한다.

Mach> SELECT COUNT(*) FROM TAG;
count(*)
-----------------------
310000000
[1] row(s) selected.

BACKUP TABLE TAG INTO DISK = 뒤에 백업 명(또는 경로)을 지정 한다.
(백업명을 사용한 경우에는 $MACHBASE_HOME/dbs 디렉토리에 백업명으로 디렉토리가 만들어지며 해당디렉토리에 데이터를 저장한다.)
이후 백업은 AFTER keyword 뒤에 이전 백업 명(또는 경로)을 지정하고 INTO DISK = 뒤에 새로운 백업 명(또는 경로)을 지정 한다.

Mach> BACKUP TABLE tag INTO DISK = '/data/backup_tag_table1';
Executed successfully.

append 프로그램을 통해 데이터를 입력한다.(2020년 2월 1일 데이터를 1천만건 입력)
입력한 데이터의 일부를 조회한 결과는 아래와 같다.

Mach> SELECT * FROM TAG LIMIT 10;
TAG20037 2020-02-01 00:00:10 651:621:000 746.123
TAG20017 2020-02-01 00:00:10 651:691:000 -646.35
TAG20052 2020-02-01 00:00:10 651:701:000 205.556
TAG20037 2020-02-01 00:00:10 651:761:000 811.815
TAG20056 2020-02-01 00:00:10 651:801:000 799.061
TAG20056 2020-02-01 00:00:10 651:831:000 -305.139
TAG20041 2020-02-01 00:00:10 651:931:000 -811.602
TAG20079 2020-02-01 00:00:10 651:941:000 195.573
TAG20017 2020-02-01 00:00:10 651:951:000 -504.78
TAG20017 2020-02-01 00:00:10 651:991:000 -201.876
[10] row(s) selected.

Mach> SELECT COUNT(*) FROM TAG;
count(*)
-----------------------
320000000
[1] row(s) selected.

Tag Table의 Incremental Backup의 AFTER 키워드를 이용하여 backup_tag_table1 이후 데이터에 대해서 백업을 수행한다.
증분 백업을 진행 할 때에는 AFTER 키워드 뒤에 최초의 백업 경로를 지정하고 INTO DISK = 뒤에는 증분된 데이터를 저장할 경로를 지정한다.

Mach> BACKUP TABLE tag AFTER '/data/backup_tag_table1' INTO DISK = '/data/backup_tag_table2';
Executed successfully.

append 프로그램을 통해 데이터를 입력한다.(2020년 2월 2일 데이터를 1천만건 입력)

Mach> SELECT COUNT(*) FROM TAG;
count(*)
-----------------------
330000000
[1] row(s) selected.

AFTER 키워드에 바로 이전 백업 경로를 지정하고 INTO DISK 뒤에는 증분된 데이터를 저장할 경로를 지정한다.

Mach> BACKUP TABLE tag AFTER '/data/backup_tag_table2' INTO DISK = '/data/backup_tag_table3';
Executed successfully.

append 프로그램을 통해 데이터를 입력한다.(2020년 2월 3일 데이터를 1천만건 입력)

Mach> SELECT COUNT(*) FROM TAG;
count(*)
-----------------------
340000000
[1] row(s) selected.

AFTER 키워드에는 이전 백업 경로를 지정하고 INTO DISK 뒤에는 증분된 데이터를 저장할 경로를 지정한다.

Mach> BACKUP TABLE tag AFTER '/data/backup_tag_table3' INTO DISK = '/data/backup_tag_table4';
Executed successfully.

현재까지 진행된 백업 디렉토리를 살펴보면 아래와 같다.

$ cd /data
$ ls
backup_tag_tagle1     backup_tag_table2    backup_tag_table3    backup_tag_table4

Mount 기능을 통한 데이터 조회

이제 부터는 백업된 데이터를 조회 하기 위해 Mount명령을 수행 한다.

Mach> MOUNT DATABASE '/data/backup_tag_table2' TO mount2;

mount한 tag 테이블의 전체건수와 데이터를 조회한다.
count 함수를 통해 건수를 조회해 보면 증분 데이터 1천만건이 조회가 되며 아래처럼 2월 1일자 raw 데이터를 확인할 수 있다.

mach> SELECT count(*) FROM mount2.sys.tag;
count(*)
-----------------------
10000000
[1] row(s) selected.

Mach> SELECT * FROM TAG LIMIT 10;
TAG20037 2020-02-01 00:00:10 651:621:000 746.123
TAG20017 2020-02-01 00:00:10 651:691:000 -646.35
TAG20052 2020-02-01 00:00:10 651:701:000 205.556
TAG20037 2020-02-01 00:00:10 651:761:000 811.815
TAG20056 2020-02-01 00:00:10 651:801:000 799.061
TAG20056 2020-02-01 00:00:10 651:831:000 -305.139
TAG20041 2020-02-01 00:00:10 651:931:000 -811.602
TAG20079 2020-02-01 00:00:10 651:941:000 195.573
TAG20017 2020-02-01 00:00:10 651:951:000 -504.78
TAG20017 2020-02-01 00:00:10 651:991:000 -201.876
[10] row(s) selected.

Restore 복구

database에 문제가 발생하거나 다른 시스템에서 백업된 데이터를 복원하는 경우에는 machadmin -r 백업파일명(또는 백업경로 지정)으로 가능하다.
예를 들면 앞서 백업한 backup1, backup2, … backup3 까지 만든 경우, 전체 데이터의 복원을 위해서는 아래처럼 수행하면 된다.
우선 machadmin -d를 통해 데이터베이스를 삭제한다.

$ machadmin -d
-----------------------------------------------------------------
Machbase Administration Tool
Release Version - 6.0 official
Copyright 2014, MACHBASE Corp. or its subsidiaries
All Rights Reserved
-----------------------------------------------------------------
Destroy Machbase database. Are you sure?(y/N) y
Database destroyed successfully.

$ machadmin -r '/data/backup_tag_table4'
-----------------------------------------------------------------
Machbase Administration Tool
Release Version - 6.0 official
Copyright 2014, MACHBASE Corp. or its subsidiaries
All Rights Reserved
-----------------------------------------------------------------
Backed up database restored successfully.

$ machadmin -u
-----------------------------------------------------------------
Machbase Administration Tool
Release Version - 6.0 official
Copyright 2014, MACHBASE Corp. or its subsidiaries
All Rights Reserved
-----------------------------------------------------------------
Waiting for Machbase server start*********
Machbase server started successfully.

Restore 기능을 이용하여 복원한 데이터를 조회해본다.
count함수를 통하여 전체 건수를 확인한다.

Mach> select count(*) from tag;
count(*)
-----------------------
34000000
[1] row(s) selected.
Elapsed time: 0.003

예를 들어 backup2까지의 데이터만 복원하는 경우는 아래 처럼 사용하면 된다.

$ machadmin -r '/data/backup_tag_table2';

주의사항

  • 데이터 중간 범위만 복원 또는 특정 백업만의 복원은 불가하다.
  • 증분백업에는 날짜 범위를 지정할 수 없으며 항상 기준백업과 현재 시각 사이만큼만을 백업한다.
  • TAG 테이블의 경우 증분백업본만을 리스토어할 수는 없고 과거의 백업본까지 모두 거슬러 올라가 복원한다.
  • 과거의 백업본이 이동되거나 삭제되면 오류를 출력하며 리스토어가 불가능하다.
  • LOG 테이블의 경우 마지막 증분백업본만을 리스토어한다.

맺음말

Tag 테이블의 경우 기존에는 테이블 전체(Full) 백업만을 지원했었다.
마크베이스 6버전에 추가된 Tag 테이블의 증분 백업 기능을 활용한다면 백업 작업을 좀 더 빠른 시간내에
수행 가능하므로 백업 이슈로 인해 Tag 테이블의 사용을 망설였다면 이제 더 이상 망설일 필요가 없다.

연관 포스트

C언어로 Binary data를 Machbase에 넣기

1.개요 Data를 다루다 보면 numeric, varchar 형 데이터뿐만 아니라 JPG, PNG, MP3와 같은 Binary data도 database에 저장해야 할 때가 존재한다. 그러나 일반 data들과는 달리 Binary

[MACHBASE 연동] Android studio에서 JDBC 연결하기

마크베이스 기술지원본부 이현민 1. 개요 수많은 데이터들이 많은 환경에서 생성되고 있는 오늘날, 우리 현대인들의 동반자인 스마트폰 또한 데이터생성의 주체로써 또는 전달자로서 알게 모르게 그 구실을