あっやb
先日、にらBOTのメインサーバーである「RaspberryPi」に、かねてから気になっていたMongoDB
というものを入れようとしました。
このMongoDB
というのは、いわゆるNoSQLのデータベースで、使いやすいらしいです。(小並感)
そして、考えるのが嫌だった私はとりあえずapt
で入れることにしました。
$ sudo apt update
$ sudo apt install mongo
...うーん遅い。
これはけつあな確t((
というわけで、Windows TerminalのSSHとにらめっこする私。
数分が立って、「流石にちょっとやめよう」と思ってCtrl+C
を押した所、なぜかRaspberryPiのaptではなく、WindowsのSSHのプロセスが終了しました。
驚く私。再度接続してみると、何事もなかったかのようにつながるRaspberryPi。
Discordを見ると、オフラインになっているにらBOT。
私のパソコンに何が起きたのですか?
にらBOTや、いろんなサーバーを動かしているRaspberryPiは、watchdog
によるheartbeat
監視を行っていました。
これは、RaspberryPiがフリーズして動かなくなった際に、本来ならシステムから送られるはずのheartbeat
が止まったことをハードウェアWatchdogが検知して、強制的にシステムを再起動させるというものです。
これは、システムにてカーネルパニックやフリーズが発生した際に、勝手に再起動してくれてベンリ-というものなんです。
しかし、今回はこれが裏目に出て、タイミング的に最悪なときに勝手に再起動してくれたっていうわけで...
さーて復旧作業するかー
まず、BOTを起動させようとした所、データベースへの接続エラーがでたので、データベースを起動させようとしました。
...
Traceback (most recent call last):
File "<データベースのディレクトリ>/main.py", line 44, in <module>
DATAS = joblib.load(SETTING["location"])
File "/usr/local/lib/python3.10/site-packages/joblib/numpy_pickle.py", line 587, in load
obj = _unpickle(fobj, filename, mmap_mode)
File "/usr/local/lib/python3.10/site-packages/joblib/numpy_pickle.py", line 506, in _unpickle
obj = unpickler.load()
File "/usr/local/lib/python3.10/pickle.py", line 1213, in load
dispatch[key[0]](self)
KeyError: 0
ん?????
このエラーについて色々調べましたが、PythonやJoblibのバージョン違いなど、色々な情報が出ましたが、どれも当てはまらず...
そこで友人の一言
「パッケージが壊れた(インストール時に一部が依存関係の問題で消された)とか、単純にデータ破損のような気がしてならないのだが…」
そして私の返し
「データ破損だとするとちょっと辛いかもしれない」
続々とフラグがたてられました。
恐る恐るStirlingでデータのファイルを見ます。
ハイデータゼンブフットンデマス!!!!!!!!
そういうわけで、Watchdogにより、中身が全部00
の172306バイトにも及ぶ空ファイルが出来上がりましたとさ...
対策を取ろう
さて、今回は何がいけなかったのでしょうか。
まず1つに、むやみやたらにソフトを入れることですね。
まぁ、過ぎてしまったことは仕方ないです。
そして、今回バックアップを全然取っていませんでした。
前回のメジャーアップデートである「8/15」のデータが最新のバックアップでした。
実に1ヶ月分のデータが消滅したというわけです。
なので、こまめにバックアップを取るということはすごく大事だと思い知らされました。
また、今回の一件を受けて、実機でのデータベース運用も見直すことになりました。
今後はVPS等のクラウドデータベースを使用する予定になりました。
クラウドを使うっていうのも一つの手です。
あとは...そうですね...
無理にデータベース構造を自作なんかしないで、最初っから有名所のデータベース機構を使ってればよかったんですよ!!!
というわけで、そんな奇行な記事はこちらです。
バックアップは大事です。余裕のある方は毎分でもとりましょう。
以上です。
データの書き戻しに付きまして、この場をお借りして謝罪させていただきます。
大変申し訳ございませんでした。
いくら「そんな重要なデータなんかないだろ( ᐙ )」とかいっても、データはデータですので...