概要
- sqlite3 データベースファイルを、システム稼動中に安全にオンラインバックアップする
- できるだけ簡単に実施したい
背景
データロガーアプリの DB に sqlite3 を使用している。
高頻度でバックアップを行いたい。
- 更新頻度: 1 秒
- DB ファイルサイズ: > 数 100 MB
- バックアップの頻度: 10 分
問題 : バックアップが書き込みとバッティングする。
-
cp
すると、数回に一回ファイルが破損 -
sqlite3 ".backup"
は、Error: database is locked
が発生
所要時間は下記の通り。
time cp db.sqlite3 db-backup.sqlite3
> real 0m0.666s
> user 0m0.000s
> sys 0m0.234s
time sqlite3 db.sqlite3 ".backup db-backup.sqlite3"
> real 0m1.878s
> user 0m0.290s
> sys 0m0.970s
方法
.timeout
を設定する
sqlite3 db.sqlite3 <<EOF
.timeout 1000
.backup db-backup.sqlite3
EOF