LXDで運用しているFirefly iiiですが、前回コンテナのイメージ作成を行いました。
今回はイメージからのデプロイと実際のデータをリカバリできるかやってみます。
LXDコンテナのカスタムイメージを作成する - paloma blog
データベースバックアップ
王道にmysqldumpでやります。
ユーザは私しかいないですが一応テーブルロックしてdumpします。
定期的にやりたいのでスクリプトにしました。
masashi@PC-ubuntu:~/scripts$ cat fireflybkup.sh #!/bin/bash path=/home/masashi/backup/firefly/ lxc exec firefly -- mysqldump --single-transaction -u fireflyiii -p<パスワード> -t fireflyiii > $path/fireflyiii-db.sql
実行します。
masashi@PC-ubuntu:~/scripts$ bash fireflybkup.sh
バックアップディレクトリに作成されてます。
masashi@PC-ubuntu:~/scripts$ ls /home/masashi/backup/firefly/ -ltr 合計 340 drwxr-xr-x 9 masashi masashi 4096 11月 16 2019 nginx -rw-r--r-- 1 masashi masashi 269 11月 20 2020 hosts -rw-rw-r-- 1 masashi masashi 234853 6月 20 15:18 fireflyiii-db.sql
イメージのデプロイ
前回作成のイメージからリカバリ用のインスタンスを作成します。
masashi@PC-ubuntu:~$ lxc image list +---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE | +---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+ | firefly-image | 754669c7e39f | no | Ubuntu 20.04 LTS server (20210201) | x86_64 | CONTAINER | 873.23MB | May 8, 2021 at 2:32am (UTC) | +---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+ | | 9ba1aa2f5dde | no | ubuntu 20.04 LTS amd64 (release) (20210610) | x86_64 | CONTAINER | 360.92MB | Jun 12, 2021 at 5:36am (UTC) | +---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
masashi@PC-ubuntu:~$ lxc launch image:firefly-image recoverytest Error: The remote "image" doesn't exist
イメージはローカルマシンにあるんですが、imageをつけるとリモートサーバを探してしまう様ですね。
masashi@PC-ubuntu:~$ lxc launch firefly-image recoverytest Creating recoverytest Starting recoverytest
masashi@PC-ubuntu:~$ lxc list +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | debian | RUNNING | 10.28.57.205 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe98:2560 (eth0) | CONTAINER | 0 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | dokuwiki | RUNNING | 10.28.57.198 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe2e:4f6a (eth0) | CONTAINER | 0 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | firefly | RUNNING | 10.28.57.107 (eth0) | fd42:24ab:b835:ae42:216:3eff:fea8:7ef0 (eth0) | CONTAINER | 1 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | firefly-backup | STOPPED | | | CONTAINER | 0 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | lxd-proxy | RUNNING | 10.28.57.177 (eth0) | fd42:24ab:b835:ae42:216:3eff:fecd:d475 (eth0) | CONTAINER | 0 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+ | recoverytest | RUNNING | 10.28.57.247 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe7f:7b52 (eth0) | CONTAINER | 0 | +----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
リカバリ用sqlインポート
デプロイしたインスタンスはサービス起動済みなのでそのままリカバリ用sqlを流し込みます。
まずはインスタンスにファイルを配置。
masashi@PC-ubuntu:~$ lxc file push backup/firefly/fireflyiii-db.sql recoverytest/root/
ファイルも移動完了。
masashi@PC-ubuntu:~$ lxc exec recoverytest -- ls /root fireflyiii-db.sql snap
ここから先はコンテナに入ります。
masashi@PC-ubuntu:~$ lxc exec recoverytest -- /bin/bash
作成済みのデータベースがありますね。
中身はイメージ作成時に初期化済みです。
root@recoverytest:~# mysql -u fireflyiii -p -e 'show databases;' Enter password: +--------------------+ | Database | +--------------------+ | fireflyiii | | information_schema | | mysql | | performance_schema | +--------------------+
データをインポートしてみます。
root@recoverytest:~# mysql -u fireflyiii -p -t fireflyiii < /root/fireflyiii-db.sql Enter password: ERROR 1062 (23000) at line 42: Duplicate entry '1' for key 'PRIMARY' root@recoverytest:~#
主キーが重複で弾かれてしまいました…。
内容は後から確認するとして上書きしたらいける?
root@recoverytest:~# mysql --force -u fireflyiii -p -t fireflyiii < /root/fireflyiii-db.sql Enter password: ERROR 1062 (23000) at line 42: Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000) at line 163: Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000) at line 246: Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000) at line 460: Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000) at line 551: Duplicate entry '1' for key 'PRIMARY' ERROR 1062 (23000) at line 581: Duplicate entry '1' for key 'PRIMARY' root@recoverytest:~#
引き続き重複エラーが出ていますが、コマンドは終了したのでアクセスしてみましょう。
エラーの件、データベースは本業ではないですが構造についてもっと勉強します。
アクセスしてみます
コンテナのホスト機からアクセスしてみます。
アクセスできましたが何かインストールかアップグレードをやってます。
完了後いつものアカウントでログインしてみます。
OK。
本番のFireflyと同じ画面です。(資産は伏せさせていただきます)
昨日支払ったゲーセンの内容も反映されています。
リカバリ成功です!
まとめ
家の環境だと壊れてもいいかということで作って終わりのサーバが多いのですが、
Fireflyは気に入っていて壊れたら困るということで今回のリカバリテストを行いました。
DBの重複エラーは出ないのが理想ですが、とりあえずリカバリはできたのでいつ壊れてもOKですね。
コンテナ環境なのでシングルのホスト機が壊れたらおしまいなのですが、
イメージもエクスポートしてあるのでその際は他のLXD環境を作って凌ごうと思います。