見出し画像

TWSNMP FC: データベースのバックアップリストア機能

今日も雨です。猫は朝4時からベランダに出たいと騒いでいました。雨水を舐めて満足したようで今は寝ています。
フィードバックの質問をきっかけにデータベースのバックアップとリストア機能を見直して3日かけてなんとか完成させました。
本題の復刻版TWSNMPのデータベースをTWSNMP FCで読み込ませる実験をしてみました。

# docker run --rm --name twsnmpfc --net host -v twsnmpfc:/datastore twsnmp/twsnmpfc
2021-05-22T06:37:57.394 Unmarshal notifyConf from DB error=json: cannot unmarshal string into Go struct field NotifyConfEnt.Report of type bool
2021-05-22T06:37:57.398 InitDataStore OpenDB err=json: cannot unmarshal string into Go struct field NotifyConfEnt.Report of type bool

残念ながらエラーで起動しませんでした。
フィードバックでいただいた質問を誤解していたようです。
復刻版ではなくTWSNMP FCのWindowsなどのデスクトップで動作させた時のデータベースをDockerのコンテナで使う方法だったようです。

これはコンテナ内の/datastore/twsnmpfc.dbへコピーすればできます。
しかし、稼働中のTWSNMP FCのコンテナにコピーすると開いた状態にデータベースファイルに上書きすることになるのでよくありません。alpineなどの他のLinuxのイメージでコンテナを作って/datastoreをマウントしてコピーするようなことが必要です。
そこで、データベースファイルを移動する方法にも使えるリストア機能を作りました。

まずは、空のデータベースで起動します。

#docker run --rm -d --name twsnmpfc --net host -v twsnmpfc:/datastore twsnmp/twsnmpfc

この状態でバックアップのディレクトリを作成します。

#docker exec -it twsnmpfc mkdir /datastore/backup

このバックアップのディレクトリに使いたいデータベースファイルをコピーします。稼働中のデータベースファイルではないので上書きにはなりません。

#docker cp /tmp/twsnmpfc.db twsnmpfc:/datastore/backup/

一度、コンテナを停止します。

#docker stop twsnmpfc

リストアコマンドでデータベースファイルを入れ替えます。リストアコマンドはデータベースを開かずに入れ替えるだけです。

#docker run --rm -it --name twsnmpfc --net host -v twsnmpfc:/datastore twsnmp/twsnmpfc -restore twsnmpfc.db
2021/05/22 07:02:04 restore done

この後、コンテナを起動すれば、コピーしたデータベースファイルで起動します。
バックアップも/datastore/backupに保存するので、

# docker exec -it d1 ls -lh /datastore/backup
total 3G
-rw------- 1 root root 256.0K May 22 06:11 twsnmpfc.db.20210522061144
-rw------- 1 root root 2.7G May 22 06:18 twsnmpfc.db.20210522061204

のコマンドで確認できます。リストアコマンドのパラメータにバックアップファイルの名前を指定すれば指定したデータベースファイルに戻すことができます。リストアする前に使っていたデータベースファイルは、バックアップに移動するので間違っても戻すことができます。




開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。