sqlite3_rsync雑記
2024/10/21にリリースされたSQLite 3.47.0や2024/11/25にリリースされたSQLite 3.47.1にsqlite3_rsyncバイナリやsqlite3_rsync.exeバイナリが同梱されるようになったので試してみたけど言語化するのが難しかったためスクラップに投げておきます。
sqlite-tools-win-x64-3470100.zipをダウンロード
zipファイルを展開してコマンドプロンプトからSQLiteを起動
> sqlite3 origin.db
下準備
sqlite> PRAGMA journal_mode = WAL;
sqlite> PRAGMA synchronous = NORMAL;
sqlite> PRAGMA busy_timeout = 5000;
sqlite> PRAGMA cache_size = -20000;
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA auto_vacuum = INCREMENTAL;
sqlite> PRAGMA temp_store = MEMORY;
sqlite> PRAGMA mmap_size = 2147483648;
sqlite> PRAGMA page_size = 8192;
sqlite> .exit
コピペ用SQL
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA busy_timeout = 5000;
PRAGMA cache_size = -20000;
PRAGMA foreign_keys = ON;
PRAGMA auto_vacuum = INCREMENTAL;
PRAGMA temp_store = MEMORY;
PRAGMA mmap_size = 2147483648;
PRAGMA page_size = 8192;
walモードにするだけでいいけど下記参考にして色々つけた
> sqlite3_rsync --help
sqlite3_rsync ORIGIN REPLICA ?OPTIONS?
One of ORIGIN or REPLICA is a pathname to a database on the local
machine and the other is of the form "USER@HOST:PATH" describing
a database on a remote machine. This utility makes REPLICA into a
copy of ORIGIN
OPTIONS:
--exe PATH Name of the sqlite3_rsync program on the remote side
--help Show this help screen
--ssh PATH Name of the SSH program used to reach the remote side
-v Verbose. Multiple v's for increasing output
--version Show detailed version information
これだけでも動く
同じフォルダにコピーされる
> sqlite3_rsync origin.db replica.db
rsyncっぽさがないのでSSHを有効にしたGitpodをで試す
SSHの鍵生成と公開鍵登録については割愛
ソースコード取ってきてビルドする
$ wget -q https://www.sqlite.org/2024/sqlite-src-3470100.zip
$ unzip -q sqlite-src-3470100.zip
$ rm sqlite-src-3470100.zip
$ cd sqlite-src-3470100
$ ./configure
$ make sqlite3_rsync
$ mv sqlite3_rsync /workspace/empty/sqlite3_rsync
$ cd ..
$ rm -rf sqlite-src-3470100
$ ls -lah
total 4.9M
drwxr-xr-x 3 gitpod gitpod 39 Nov 30 13:44 .
drwxr-xr-x 7 gitpod gitpod 91 Nov 30 13:40 ..
drwxr-xr-x 7 gitpod gitpod 119 Nov 30 13:44 .git
-rwxr-xr-x 1 gitpod gitpod 4.9M Nov 30 13:42 sqlite3_rsync
これでよし
ビルドしたsqlite3_rsyncバイナリはダウンロードしておくとお得
再走1
$ wget -q https://www.sqlite.org/2024/sqlite-tools-linux-x64-3470100.zip
$ unzip -q sqlite-tools-linux-x64-3470100.zip
$ ./sqlite3_rsync --version
./sqlite3_rsync: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by ./sqlite3_rsync)
sqlite-tools-linux-x64-3470100.zip内のバイナリではglibc 2.38以上が必要らしい
少なくともUbuntu 22.04ではそのまま動かなかったのでソースコードからビルドしました
Windowsのsshコマンドをいい感じに使ってくれるのでこれで動く
Gitpodのsqlite3_rsyncバイナリがあるフォルダにコピーされる
> sqlite3_rsync origin.db gitpodio-empty-00000000000@gitpodio-empty-00000000000.ws-us117.gitpod.io:/workspace/empty/replica.db --exe /workspace/empty/sqlite3_rsync
ただsshコマンドのオプションをsqlite3_rsyncコマンドに渡せないため秘密鍵が%USERPROFILE%\.ssh
以外の場所にあると使えないように見える
そんなことはない
%USERPROFILE%\.ssh\config
ファイルで設定すればよい
Host gitpod
HostName gitpodio-empty-00000000000.ws-us117.gitpod.io
User gitpodio-empty-00000000000
IdentityFile C:\Users\sqlite\Documents\path\to\id_ed25519
コマンドも短くなってお得
> sqlite3_rsync origin.db gitpod:/workspace/empty/replica.db --exe /workspace/empty/sqlite3_rsync
Verboseは-vではなく-vvにするとより詳しく分かる
> sqlite3_rsync origin.db gitpod:/workspace/empty/replica.db --exe /workspace/empty/sqlite3_rsync -vv
ssh -e none gitpod /workspace/empty/sqlite3_rsync --replica origin.db /workspace/empty/replica.db
sent 13 bytes, received 22 bytes, 23.10 bytes/sec
total size 4,096 speedup is 117.03
SQLite + rsync + SSH = GOD
Litestreamの代わりになるかな……。