SQLite | SQLite 명령어 | 데이터베이스 백업 및 복원 (.backup 명령/.restore 명령)

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> 

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