반응형

SQLite 데이터베이스의 백업을 수행하려면, 데이터베이스마다 작성되는 파일을 단순히 복사해 두는 것만으로도 되지만, 다른 페이지에서 설명한 덤프와 가져오기로도 할 수 있다. 여기에서는 다른 방법으로 .backup 명령과 .restore 명령을 사용한 방법에 대해 설명한다.

.backup 명령을 사용한 백업

우선 .backup 명령을 사용하여 데이터베이스 백업 방법이다. 형식은 다음과 같다.

.backup ?DB? FILE

첫 번째 인수는 백업 데이터베이스명을 지정한다. 생략되면 main이다. main은 데이터베이스에 연결했을 때 자동으로 할당되는 데이터베이스명에서 일반적으로 생략 될 수 있다. 연결된 데이터베이스명을 백업 할 경우에는 데이터베이스명을 지정한다. 데이터베이스명에 관해서는 연결된 데이터베이스 확인을 참조한다.

두 번째 인수는 백업 파일명을 지정한다. 파일명과 확장자는 자유롭게 정해도 상관 없다. 존재하지 않는 파일명을 지정하면 새 파일이 생성되고 백업이 이루어진다.

--

그럼 실제로 백업을 해보자. 우선 백업할 데이터베이스에 연결한다. 현재 데이터베이스에는 두 개의 테이블이 포함되어 있다.

.tables
sqlite> .tables
color  user 
sqlite> 

이 데이터베이스를 백업한다. 백업 파일명은 이번에는 현재 디렉토리의 mydb.back 파일을 지정한다. 이 파일은 현재 존재하지 않으므로 자동으로 새 파일이 생성된다.

.backup ./mydb.back
sqlite> .backup ./mydb.back
sqlite> 

백업이 완료되었다. 현재 디렉토리를 보면 mydb.back라는 파일이 생성되어 있다. 생성된 파일은 텍스트 파일이 아니기에 편집기에서 내용을 확인할 수 없다.

$ ls -al
total 5080
drwxr-xr-x@  8 kimkc  staff      272 11  4 23:31 .
drwxr-xr-x   9 kimkc  staff      306 10 17 23:49 ..
drwxr-xr-x  27 kimkc  staff      918 11  4 23:31 bak
-rw-r--r--   1 kimkc  staff    16384 11  4 23:30 mydb.back
-rw-r--r--   1 kimkc  staff    16384 11  4 22:38 mydb.sqlite3
-rwxr-xr-x@  1 kimkc  staff   691768 10 11 18:31 sqldiff
-rwxr-xr-x@  1 kimkc  staff  1152260 10 11 18:32 sqlite3
-rwxr-xr-x@  1 kimkc  staff   719796 10 11 18:31 sqlite3_analyzer
$ 

이것으로 데이터베이스의 백업이 완료되었다.

.restore 명령을 사용한 복원

이어서 .restore 명령을 사용하여 백업된 데이터베이스에서 복원하는 방법이다. 형식은 다음과 같다.

.restore ?DB? FILE

첫 번째 인수에는 복원 데이터베이스명을 지정한다. 생략되면 main이다. 두 번째 인수에는 복원 백업 파일명을 지정한다.

복원을 하려면 먼저 데이터베이스에 연결한 후에 실행하는데, 복원을 실행하면 현재 연결된 데이터베이스에 저장된 테이블이나 데이터 등이 모두 삭제되고 복원이 진행되니 주의하길 바란다.

--

그럼 실제로 복원을 해보자. 이번에는 새로운 데이터베이스 newdb.sqlite3를 생성한 후에 생성 된 데이터베이스에서 복원을 한다. 먼저 데이터베이스를 만든다.

sqlite3 newdb.sqlite3
$ sqlite3 newdb.sqlite3
SQLite version 3.19.3 2017-06-27 16:48:08
Enter ".help" for usage hints.
sqlite>

복원을 한다. 인수에 앞서 백업했던 mydb.back 파일을 지정하고 .restore 명령을 실행한다.

.restore ./mydb.back
sqlite> .restore ./mydb.back
sqlite> 

복원이 완료되었다. 백업된 파일에 저장되어 있던 데이터로 데이터베이스의 내용으로 변경되었다.

테이블이 작성되었는지 여부를 확인해 보면 두 개의 테이블이 생성되어 있는 것을 알 수 있다.

.tables
sqlite> .tables
color  user 
sqlite> 

다음은 테이블에 데이터가 저장되어 있는지 확인한다. 두 테이블에 백업한 파일에 작성된 대로 데이터가 저장되어 있다.

select * from user;
sqlite> select * from user;
devkuma|28|Seoul
kimkc|22|Busan
araikuma|32|Seoul
happykuma|23|Seoul
mykuma|23|Daejeon
sqlite> 
select * from color;
sqlite> select * from color;
1|Red
2|Blue
3|White
sqlite> 

복원을 실행하여 백업된 데이터베이스를 새 데이터베이스에 복원할 수 있었다.

반응형

+ Recent posts