22837


使用中のSQLite3データベースは、次の方法でバックアップできますね（オンラインバックアップ）

[code]

    sqlite3 /path/to/db ".backup /path/to/backup"
    
[/code]

しかしデータベースが大きいので、この方法ではディスク容量が足りません。

そこでローカルにファイルを作らずに、別のホストへバックアップを送りたいのですが、なにかいい方法がないものでしょうか。


CC BY-SA 3.0
2016-03-03T15:02:19.047
22773
2016-03-05T12:27:06.787
361
question
sqlite
使用中のSQLite3データベースを別のホストへバックアップするには？


NFSを使って、別のホストのディレクトリもしくはファイルをマウントし、そのマウントした先を出力先に指定すれば、ローカルファイルではなく、別のホストのファイルにバックアップされます。


CC BY-SA 3.0
2016-03-04T04:23:56.273
22786
2016-03-04T04:23:56.273
217
22773
answer


データベースが大きすぎてバックアップが取れないということであれば、アプリケーションを停止してファイルをコピーするのが確実で一番速い方法だと思います。

一応、

[code]

    sqlite3 db.sqlite3 ".dump" | ssh remotehost 'cat > a'
    
[/code]

といったようにダンプを標準出力経由でリモートに転送する方法も考えられますが、DBが大きいのであれば

  * アプリケーションの動作が遅延する
  * バックアップに長時間かかる
  * またはその両方 

といった事態が起きることが想像されます。

(そもそもバックアップも取れないほどストレージが逼迫してること自体をどうにかすべきですが)


CC BY-SA 3.0
2016-03-04T04:59:42.230
22788
2016-03-04T04:59:42.230
5793
22773
answer

[code]

    sqlite3 store.db ".backup /dev/stdout" > backup.db
    
[/code]

標準出力のリダイレクト先はなんとでも。(httpのレスポンスでもいい)


CC BY-SA 3.0
2016-03-04T05:04:05.403
22790
2016-03-04T05:04:05.403
14639
22773
answer


rdiff-backupでディレクトリの差分を同期する方法もあるようです。

[code]

    aptitude install rdiff-backup
    (exclusiveロックを取る)
    rdiff-backup local_var user@host::/remote_var
    (ロックを解放)
    
[/code]


CC BY-SA 3.0
2016-03-05T12:27:06.787
22837
2016-03-05T12:27:06.787
361
22773
answer