Edited at

[mastodon] PostgreSQLを 9.5 → 11.1 へアップグレードする


経緯

お一人様用のmastodonを運用しているのですが、mastodonの2.7.0へのアップデートにより、PostgreSQLのアップグレードが推奨されることとなりました。

ミドルウェアのアップグレードなんてしたことがないですし、聞ける人もいないしうわーんって感じです。

去年夏ごろに立てた鯖なのですが、入っているPostgreSQLのバージョンが9.5でしたので、これを機に負債を解消すべく一気に気合でアップグレードを行うことにしました。

いろいろ調べて自分で咀嚼できた手順でやってみました。

他の鯖缶さんたちの役に立てばと思い公開しますが、

正直、こっち↓の方法がUbuntuでは最適解だと思いますので、そちらを試してみてほしいなぁと思うところがあります。

https://gorails.com/guides/upgrading-postgresql-version-on-ubuntu-server

存在は知ってたのですがポート変えて起動しなきゃなのか?とかちょっとよくわからなかったのでやめました。

手動でアップグレードしてみた今ならなるほどな~って感じで実行できますね…。

なにも考えずにapt-getで11をインストールしてそのまま↑の流れに乗っかればいいだけですね。


前提


  • Ubuntu 16.04

  • mastodon 非Docker


おおまかな流れ


  • mastodonを停止

  • 既存PostgreSQLのバックアップと退避

  • 新しいPostgreSQLをインストール

  • バックアップより復元

  • サーバリブート


mastodonを停止

とりあえずとめます。

systemctl stop mastodon-*.service


既存PostgreSQLのバックアップと退避

PostgreSQLの中身をpg_dumpallでdumpします。

postgresユーザじゃないと動かないのでsuでユーザ変えるのを忘れずに。

sudo su postgres

mkdir backup
cd backup
pg_dumpall > all_backup_postgres-db_20190122
exit

dumpしおわったらrootで旧PostgreSQLを一応退避

これ退避しなくても正直よしなにやってくれるので放置でもいいとおもうんですけど一応。

sudo su

systemctl stop postgresql
mv /var/lib/postgresql /var/lib/postgresql.old
mv /etc/postgresql /etc/postgresql.old

うちの環境では/var/lib/postgresqlにインストールされているようでした。

また、/etc/postgresql/9.5/main/postgresql.confを見ると

data_directory=/var/lib/postgresqlになっていたので

そちらも退避してます。


新しいPostgreSQLをインストール

コレ自体は本家のページと同様です。

https://www.postgresql.org/download/linux/ubuntu/

ただバージョン指定せずにlatestを引っ張ってきてます。

apt-getのリポジトリに追加します。

vim /etc/apt/sources.list.d/pgdg.list

# でこれ↓を追加
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main

その後は新しいPostgreSQLをインストールします。

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

apt-get update
apt-get install postgresql


バックアップより復元

取ってたdumpからDBなど復元します。

sudo su postgres

cd /var/lib/postgresql.old/backup
# dumpより復元
psql -d postgres -f all_backup_postgres-db_20190122
# 一応再起動
sudo systemctl restart postgresql
# クラスターが上がってきているか確認
pg_lsclusters


サーバリブート

この時点でsudo systemctl start mastodon-*.serviceで上げてもある程度は動いたのですが、sidekiq先輩がうまく動かず、他鯖との通信がだめだったのでリブートしました。

自鯖だと自分の裁量でてきとうにできるのでいいですね。


まとめ

DBという飛ぶとやばいやつのアップグレードという貴重な体験をすることができたのでよかったです。

自鯖を持つとインフラ周りの大変さが非常によくわかりますね。。。

何かしらおかしい点があればツッコミをお願いします。

あぁ、次はRedisを3→5に上げるのとRubyを2.5.3→2.6へ上げないと……。