# 컴퓨터 간 SQLite 데이터베이스를 더 빠르게 복사하는 방법

> Clean Markdown view of GeekNews topic #20641. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20641](https://news.hada.io/topic?id=20641)
- GeekNews Markdown: [https://news.hada.io/topic/20641.md](https://news.hada.io/topic/20641.md)
- Type: news
- Author: [baeba](https://news.hada.io/@baeba)
- Published: 2025-05-02T09:53:09+09:00
- Updated: 2025-05-02T09:53:09+09:00
- Original source: [alexwlchan.net](https://alexwlchan.net/2025/copying-sqlite-databases/)
- Points: 22
- Comments: 2

## Summary

SQLite 데이터베이스를 **rsync**로 직접 복사하면 파일 크기가 커져 느리고 불안정할 수 있습니다. 이를 해결하기 위해 **`.dump` 명령어**를 사용하여 텍스트 기반으로 압축 및 복원하는 방법을 제안합니다. 이 방법은 데이터베이스를 **SQL 텍스트**로 변환하여 파일 크기를 줄이고, **gzip**을 통해 추가적인 용량 절감이 가능합니다. 결과적으로, 이 방법은 대용량 SQLite 전송 시 **속도와 안정성**을 개선하며, 특히 인덱스가 많은 데이터베이스에 효과적입니다.

## Topic Body

**서론**  
  
* SQLite 데이터베이스를 rsync로 직접 복사할 경우, 인덱스 등으로 인해 파일 크기가 커져 느리고 불안정함.  
* 이에 따라 `.dump`를 활용해 텍스트 기반으로 압축·복원하는 방식이 제안됨.  
  
**본론**  
  
* `.dump` 명령은 전체 DB를 SQL 텍스트로 출력하며, 인덱스는 명령어 한 줄로 대체되어 파일 크기가 작아짐.  
  
  ```bash  
  sqlite3 my_database.db .dump > my_database.db.txt  
  ```  
  
* 텍스트 파일은 gzip 압축 시 추가적인 용량 절감 가능:  
  
  ```bash  
  sqlite3 my_database.db .dump | gzip -c > my_database.db.txt.gz  
  ```  
  
* 서버에서 압축본을 생성하고, 로컬로 복사 후 복원하는 절차로 전환함:  
  
  ```bash  
  ssh username@server "sqlite3 db.db .dump | gzip -c > db.txt.gz"  
  rsync --progress username@server:db.txt.gz .  
  gunzip db.txt.gz  
  cat db.txt | sqlite3 restored.db  
  ```  
  
* 원본 DB 파일 3.4GB → 덤프 텍스트 1.3GB → gzip 압축본 240MB로 약 14배 감소.  
  
* 기존 rsync 방식은 전송 도중 DB가 변경되면 `database disk image is malformed` 오류 발생 가능.  
  
* 텍스트 덤프 방식은 복사 시작 후 내용 변경 위험이 없으므로 일관된 백업이 가능함.  
  
**결론**  
  
* `.dump` + 압축 + 복원 방식은 대용량 SQLite 전송 시 속도와 안정성 모두 개선됨.  
* 특히 인덱스가 많은 DB에 효과적이며, 전송 실패나 손상 가능성을 줄일 수 있음.  
* 대용량 SQLite를 자주 다룬다면 적용할 만한 실용적인 최적화 방식임.

## Comments



### Comment 38116

- Author: ng0301
- Created: 2025-05-02T17:21:44+09:00
- Points: 1

왜 이런 작업이 필요한지 백그라운드가 궁금하네요

### Comment 38118

- Author: winterjung
- Created: 2025-05-02T17:59:37+09:00
- Points: 1
- Parent comment: 38116
- Depth: 1

원문에서는 백업 & 분석용이라곤하네요. 아마 로컬에서 duckdb 같은걸로 분석하고 싶은 것 아니었을까 싶어요.
