« ^ »

データベースのバックアップは大切

所要時間: 約 5分

ゲームのデータベースが破損し、ゲームへのログインすらままならない状況に陥った。僕の大切なゲームは、何もしていないのに壊れた。今回はそんな話をしようと思う。この文章は事実を元にOpenAI API (モデル: gpt-4o-2024-05-13 )を用いて作成した。表現が誇張されたりしている部分はあるけれど、元にあった事は事実なので、本当に焦った様子を想像すると少し笑えるかもしれない(本当に焦ったんだからね!!)。暇な時にでも読み物として楽しんでもらえると嬉しい。

虫の息となった仮想世界

薄暗い部屋に一人、息を潜めて、僕はゲームサーバのログを眺めていた。この狭い部屋には、過去の時間が封じ込められたようだった。大きすぎる昇降デスクと、ベッド代わりのゲーミングチェア。デスクの上には、愛用のキーボードである HHKB 、トラックパッド、そしてコードがプリントされたマグカップ。僕の世界はこの部屋に収束されていた。

ヘッドマウントディスプレイの中で流れるログは、まるで過去の思い出を映し出しているかのようだ。そのログを出力するゲームサーバは、大怪我で入院した子供のために準備し、一緒に楽しんできた Minecraft 風のオンラインゲームだ。オンラインゲームのゲームサーバを Google Cloud にホストし、そこに接続して仮想世界の中を旅していた。建築をしたり、イベントを開催したり、配信をしたりした。怪我が直って退院した後も、仲間を集めて仮想世界の旅を続けた。その世界には僕たちの笑顔や涙、そして共に過ごした時間が詰まっていた。

しかしその仮想世界は今や虫の息だ。それを見るのが辛かった。僕たちは離れた土地に住んでいる。だからこの仮想世界が唯一の交流手段だった。そんな大切な世界が、静かに死にゆく様を目の前にして、手も足も出せない無力感に苛まれていた。

数か月前、新しい冒険を求めて一度世界をリセットした。以前の世界では、Modをたくさん入れ、その他にも手をかなり加えていた。そのためゲームバランスはおかしくなり、自分達は最強の存在になってしまっていた。この状態は正直つまらない。そこで旧世界をアーカイブし、新しい世界を一から作り直した。新たな地で、仲間と共に新しい建築物や構造物を次々と生み出し、日々が輝いていた。

しかしその新しい仮想世界は、旧世界に比べて負荷が高く、不安定な状況が続いていた。それでも、その不安定さを受け入れて進む道を選び、情熱は冷めることがなかった。

今日の出来事はいつもとは違っていた。またもや仮想マシンが高負荷でアクセス不能となり、強制再起動をせざるを得なかった。しかし、今回は再起動しても、ゲームサーバは起動と停止を繰り返すだけ。ログを眺めることで何とか原因を特定しようとしたが何も分からず、手詰まり感に打ちのめされた。

存在しないバックアップと復旧

旧世界では毎日、世界のバックアップを作成しており、何かあっても1日前には立ち戻れるようにしていた。幸いな事に旧世界は非常に安定していて、このバックアップが使われる事がなかった。おそらく、それで心の何処かに慢心が生れてしまったのだろう。新世界ではバックアップの仕組みを整備する事はなかった。正直なところ、何とかなるだろうとも思っていたが、その考えは甘かったようだ。

このゲームのデータベースは、複数の sqlite3 ファイルと独自フォーマットのテキストファイルが組み合わさり構成されている。この複雑な構成から、問題を探し出すのは難しく思えた。もう新しい世界を始める決意をしなければならないのかと、自分自身に問いかけた。しかし、どこか心の奥底に微かな希望の灯が燻っていた。諦めきれず、一つ一つファイルをチェックする事にした。

深いため息をつきながら、 YouTube で気を紛らわせてはファイルを確認する。 そんな時 env_meta.txt というファイルに突然目が留まり、確認するとこの中身はバイナリデータになっていた。これはおかしな事だ。正常であれば経過日数やゲームの環境情報が記されるはずのファイルが、不明なバイナリデータに置き換えられている。これがゲームサーバの不正終了に伴う問題なのか、ゲームサーバの他のバグなのか、ハッキングの痕跡なのか、その原因は分からない。けれど、このファイルが正常に戻れば新世界は復旧するかもしれない。

早速 env_meta.txt を復旧する作業にとりかかる事にした。しかしバックアップを取っていないから、このファイルの正しい情報はもうどこにも存在しない。まずはこのファイルを削除し、サーバを起動すると自動で新しいファイルを生成してくれるのではないかと考えた。 env_meta.txt を削除し、ゲームサーバを再起動する。しかし、その微かな期待も虚しく、ゲームサーバは再度停止した。

次に過去のデータベースから env_meta.txt ファイルを引っ張り出して使ってみる事にした。旧世界のアーカイブしたデータベースには、 env_meta.txt ファイルは眠っているはずだ。アーカイブを解凍すると env_meta.txt はやはりあった。中身を確認すると、完全に理解はできなかったが、ぱっと見では正しそうだった。このファイルを所定の位置に配置し、再びゲームサーバを起動し、そして祈りを捧げた。

すると、まるで奇跡が起きたかのように、今度はゲームサーバがスムーズに立ち上がり、ポートを開いて待受状態となった。ゲームにログインしてみると、そこには破損以前の世界が広がっていた。データベースも世界も元通りだった。涙が一粒、瞳に浮かんだ。

バックアップは大切

僕らはデータベースを復旧し、過去と平穏な日々を取り戻した。この小さな奇跡に感謝しながら、再び仲間と共に仮想世界で新たな冒険を続けることだろう。その日々が続く限り、僕の心には希望の灯が燃え続ける。そして、バックアップは必ず取るという事を誓った。