5 分間隔で実行される cronjob から sqlite データベースをバックアップしようとしています。データベースは「ライブ」であるため、バックアップを実行したいときに実行中のクエリがあります。
バックアップを信頼できるように、バックアップ時にデータベースが良好な状態であることを確認したいと思います。
私の現在の戦略(擬似コード):
function backup()
{
#try to acquire the lock for 2 seconds, then check the database integrity
sqlite3 mydb.sqlite '.timeout 2000' 'PRAGMA integrity_check;'
if (integrity is ok and database was not locked)
{
#perform the backup to backup.sqlite
sqlite3 mydb.sqlite '.timeout 2000' '.backup backup.sqlite'
if (backup could be performed)
{
#Check the consistency of the backup database
sqlite3 backup.sqlite 'PRAGMA integrity_check;'
if (ok)
{
return true;
}
}
}
return false;
}
さて、私の戦略にはいくつかの問題があります。
- ライブ データベースがロックされていると、バックアップを実行できないため、問題が発生します。多分トランザクションはそこで役立つでしょうか?
- とバックアップの間に何か問題が発生した場合
PRAGMA integrity_check;
、私はめちゃくちゃです。
何か案は?sqlite3 .backup
ところで、と 古き良きの違いは何cp mydb.sqlite mybackup.sqlite
ですか?
[編集]私は組み込みシステムで nodejs を実行しているので、誰かが Ruby ラッパーを使用したsqlite オンライン バックアップ APIを提案したとしても、チャンスはありません ;(