プログラミングなんてわからないんですけど〜

元プログラマによるプライベートでのプログラミング日記。1/3のつもりだけどソフト関連はここがメイン

mastodonのDBをminioにバックアップする

DBのバックアップしていますか?一般的に公開されている方法だとS3にアップロードする方法がよくありますが、今回は自分で建てたminioにバックアップします。

まず、DBのバックアップです。今回はmastodonユーザで行います。mastodonユーザのホームフォルダに「.pgpass」というファイルを作ります。
/home/mastodon/.pgpass

127.0.0.1:5432:dbname:user:password
  • 127.0.0.1 : postgresが動いているサーバを指定します。普通はそのマシンで動いているから127.0.0.1でいいのかな?
  • 5432:postgresのポート番号。
  • dbname : バックアップしたいDBの名前を指定します。mastodonの場合、.env.productionファイルに書かれているはずです。
  • user : DBにアクセスできるユーザ名を指定します。これも.env.productionの書かれているはずです。
  • password : DBにアクセスできるユーザのパスワードを指定します。これも(ry。

このファイルを使ってバックアップするには、今回こうしています。

FILE=backup/mstdn.pgbuckup.`date +%Y%m%d_%H%M%S`.pgbump
echo $FILE
pg_dump --host=127.0.0.1 --no-password --username=user --no-owner mastodondb > $FILE

実行する前にホームフォルダ配下に「backup」というフォルダを作ります。ここにファイルを格納します。一行目がファイル名の生成部分です。二行目は表示しているだけですね。三行目でバックアップをとります。--hostでpostgresの入っているサーバを指定、--usernameでDBにアクセスできるユーザ名を指定、mastodondbがここではバックアップしたいDBになります。

tar -Jcvf $FILE.tar.xz $FILE

このままだと転送するファイルサイズが大きいので圧縮します。

つぎに、awscliを動かして転送します。awscliはpipで入れています。ホームフォルダに「.aws」というフォルダを作成してその中に「credentials」というファイルを作成します。
/home/mastodon/.aws/credentials

[default]
aws_access_key_id=miniouser
aws_secret_access_key=miniopassword
  • miniouser : minioのユーザ名を指定します。
  • miniopassword : minioのアクセスキーを指定します。

awscliはこのように呼び出します。

~/.local/bin/aws --endpoint-url http://127.0.0.1:1234 s3 cp $FILE.tar.xz s3://backup/

endpoint-urlで指定したサーバに保存しにいきます。この場合は、そのサーバのbackupというバケットにアップロードします。

一連の操作をまとめるとこうなります。

/home/mastodon/backup.sh

FILE=backup/mstdn.pgbuckup.`date +%Y%m%d_%H%M%S`.pgbump
echo $FILE
pg_dump --host=127.0.0.1 --no-password --username=user --no-owner mastodondb > $FILE
tar -Jcvf $FILE.tar.xz $FILE
~/.local/bin/aws --endpoint-url http://127.0.0.1:1234 s3 cp $FILE.tar.xz s3://backup/
rm -f backup/*

このようなファイルをcronに登録しておけば、定期的にバックアップが可能になります。

minioをインターネットに公開してアップロードする場合ですが、私はポート番号を変えるのと書き込み専用にしています。書き込み専用にすれば、キーとかが漏れても最悪データをとられないと考えたからです。