Misskeyの運用に欠かせないデータベースのバックアップ方法について説明します。
VPS運用経験者はもちろん、技術を持っていないVPS運用初心者でもわかりやすいツールを用いて、手順も細かく説明しています。ぜひご参考にしてみください。
以下について記載しています
- 手動バックアップ方法
- 自動バックアップ方法
- 復元(リストア)方法
Misskeyのデータベースバックアップ方法
当ブログがテスト運用しているMisskeyのインスタンスはXserver VPSを利用しています。
Xserver VPSにはプランによっても異なりますが、ディスク容量が50GB~用意されているので、VPSを丸ごとバックアップしてしまっても良いでしょう。
ただしこの方法はデータベースを含めたデータ全体をバックアップするので、少し効率が悪いです。
そこでネット上のストレージにデータベースだけをバックアップする方法が一般的ですが、利用自体は無料ですがデータを取り戻すときに料金が発生(エグレス料金)するなどのデメリットも。
クラウドフレアR2など便利はありますが、エグレス料金が意外にかかります。
ここでは、データベースのバックアップを管理者ご自身のパソコンに抜き出す方法をご紹介します。
データをパソコンに抜き出すので、どこへでも保存ができるという利点があります。
その手順をこれから説明していきます。
Misskeyデータベースバックアップの概要
データベースのバックアップはTera Termのみでも可能ですが、わかりやすい操作を実現するためWinSCPも併せて使います。
いくつかコマンドを入力していきますが今回はコマンドの詳しい説明は省略します。
Tera Termのインストール方法(直リンク)やWinSCPのインストール方法(直リンク)についてはMisskyインスタンスの立て方にて案内しています。
-
Misskeyサーバーの立て方(インスタンス)Xserver VPSで徹底解説【初心者】
続きを見る
Tera Termを起動してMisskeyにログイン
Tera Termを起動し、「ホスト」にVPSパネルに表示されているIPアドレスを入力し、サービスに「SSH」を選びます。最後に「OK」をクリックします。
警告が出ますが「続行」をクリックします。
ユーザ名に「root」、パスフレーズに「rootパスワード」を入力し、「OK」をクリックします。
コマンドはコピペしてお使いください。コピペするときは、一行ずつコピーして貼り付けてください。
command
sudo mkdir /var/backup
sudo chmod 777 /var/backup
バックアップディレクトリが作成できました!
ここからはいきなり2つに分岐します。やりやすい方を選んでください。
- 手動でバックアップする場合
- 定期的にバックアップする場合
手動でバックアップする場合
command
$ sudo -u postgres pg_dumpall | gzip -c > /var/backup/misskey$(date +%Y%m%d%H%M)-backup.gz
コマンド実行後、「could not change directory to "/root":権限がありません」と出ますが無視して構いません。
ディレクトリを作成したユーザーとデータベースのバックアップをするためのユーザーが異なるためです。バックアップは完了していますので、進めてください。
下記のコマンドでバックアップファイルが作成されていることが確認できます。赤文字部分が作成されたバックアップファイルです。
command
ls -l /var/backup
WinSCPを起動し下記を入力し「ログイン」しましょう。
- 転送プロトコル:SFTP
- ホスト名:VPSのIPアドレス
- ユーザ名:root
- パスワード:VPS作成時に入力したrootパスワード
「不明なサーバーに~~」という警告メッセージが出ますが「はい」をクリックして続行します。以降は出ません。
WinSCP(左のウィンドウがパソコン)とVPS(右のウィンドウがXserver VPS)が接続されました。
ディレクトリアイコンをクリックします。
バックアップディレクトリ「/var/backup」を入力し、OKをクリックします。
バックアップディレクトリに移動し、バックアップファイルが作成されていることを確認できればOKです。
バックアップファイルのアイコンはお使いのPC状況で変わります。アイコンはバックアップやリストア(復元)には全く関係ないので無視してください。
バックアップデータベースのファイルはドラッグアンドドロップで移動ができます。保存して置きたい先へ自由に移動してください。画像はデスクトップにデータを移動しています。
バックアップしたデータを無事VPS上から移動できましたら、VPS上にあるバックアップファイルは消して問題ありません。
VPSのディスク容量は貴重なのでバックアップ後のデータ移動が済みましたら削除してしまいましょう。
手動でのデータベースバックアップ手順は終了です。
自動で定期的にバックアップする場合
WinSCPを使って、下記のディレクリに移動します。
command
/etc/cron.d
空白部分を右クリックし「新規」「ファイル」とクリックしていきます。
ファイル名入力の画面がでますので、「db_backup」と入力します。
ファイルの中身が開きますので、下記のコマンドをゴッソリ貼り付けます。3行目の「15 23 * * * 」は下で説明ありますのでご注意ください。
command
SHELL=/bin/sh
MAILTO=""
15 23 * * * postgres pg_dumpall | gzip -c > /var/backup/misskey$(date +\%Y\%m\%d\%H\%M)-backup.gz
30 23 * * * root find /var/backup -name '*.gz' -mtime +14 -delete
数字と*の部分について【「15 23 * * * 」の補足】
「15 23 * * *」には以下の意味があります。
「15 23 * * *」は左から「分/時/日/月/曜日」を表しており、*は指定なしとなります。「15 23 * * *」の場合「毎日夜23時15分にバックアップを開始せよ」という意味になります。
すべて「*」にしてしまうと1分ごとにバックアップがはじまってしまうので、最低でも「分/時/」は指定してください。
曜日の指定も数字を利用します。曜日と数字の関係は以下。
- 0:日曜日
- 1:月曜日
- 2:火曜日
- 3:水曜日
- 4:木曜日
- 5:金曜日
- 6:土曜日
おすすめとしては毎週日曜の深夜2時にバックアップをすると良い感じですね。
推奨設定をする場合は「0 2 * * 0」にすればOKです。
コマンドの貼り付けが終わりましたら、ファイルを保存します。
グレーアウト(灰色)になれば保存完了です。
最後に下記のコマンドを一行ずつ実行します。
command
sudo chmod 644 /etc/cron.d/db_backup
sudo systemctl restart cron
あとは指定した時刻にバックアップが開始されることを確認しましょう。
自動バックアップは古いデータの削除も
自動バックアップの場合、指定した時間にどんどんバックアップを実施していきます。
そのため、知らぬうちにバックアップファイルでVPSのディスク容量を圧迫してしまいます。
ここでは、バックアップしたデータを定期的に削除していくコマンドの追加を説明します。
といってもとても簡単で先ほど作成したファイル(db_backup)に以下の一行を追加するだけです。数字は一例(23時30分に実行を表す)です。
command
30 23 * * * root find /var/backup -name '*.gz' -mtime +14 -delete
「-mtime +14」は14日前に作成したファイルを探し出すコマンド(パラメータ)で「-delete」は削除を意味するパラメータです。
追記したコマンドの意味は「2時5分にgzファイルを洗い出し日付が14日前のファイルは削除せよ」という意味になります。
14日分もバックアップはいらないと思うのであれば、この数字を小さくしていけばOkです。7日分なら+7とすればOKです。
command 5 2 * * * root find /var/backup -name '*.gz' -mtime +7 -delete
指定した時刻にバックアップが完了していれば自動バックアップ機能は動作しています。
また、14日後以降は古いものから削除されていきますので、自動バックアップ開始後は14日後の動作も確認しておくことを忘れずに。
以上でデータベースバックアップの手順説明は終わりです。
データベースの復元
バックアップしたデータベースの復元方法を説明します。
/var/backupディレクトリにバックアップデータベースがない場合は、保存先から/var/backupへ移動しておきます。
WinSCPを使ってバックアップファイルを移動した要領で移動しておきましょう。
下記のコマンドを1行ずつ実行します。赤文字部分はあなたが取得したバックアップファイル名となりますので、ご注意ください。
command cd /var/backup gzip -c -d misskey202311092327-backup.gz > misskeydb.sql ls
lsコマンドでmisskey.sqlというファイルが生成されていれば復元準備は完了です。
最後に以下のコマンドを実行します。
command
sudo -u postgres psql -f misskeydb.sql
以上で復元が開始されます。
Misskeyのデータベースバックアップ方法:まとめ
いざという時のためにバックアップはとても重要です。
VPS自体を丸々バックアップすることも良いですが、すべてをバックアップすることは少し効率が悪いです。
データベースのバックアップを定期的に取っておくことで、少ない容量でデータを保つことができます。
手動バックアップ、自動バックアップ、ご自身のやりやすい方法でバックアップを実施してください。
参考サイト