私のサーバーには、Matrixシナプスマスターサーバーをホストする仮想マシンがあります。
バージョン9.6はEOLなので、postgresqlを更新する必要があります。
データベースは/var/lib/postgresql/9.6/main
すでに56GBです。
次のスクリプトを使用してデータベースをSQLファイルにダンプします。
#!/bin/bash
DB=synapse
U=irc-bridge
# directory to dump files without trailing slash:
DIR=/home/synapse/postgres-backup
mkdir -p $DIR
TABLES="$(psql -q -d $DB -U $U -t -c "SELECT table_name FROM information_schema.tables WHERE table_type='BASE TABLE' ORDER BY table_name")"
w=$(echo $TABLES|wc -w)
echo $w tables
i=0
for table in $TABLES; do
i=$((i + 1))
echo "$i/$w: backup $table ..."
pg_dump -U $U -t $table $DB | gzip > $DIR/$table.sql.gz;
done;
約9GBの圧縮ファイルを取得します。
9.6でPostgresクラスタをアップグレードする最も簡単な方法は何ですか?
答え1
最善の方法は、データベース全体をダンプして新しいクラスタにインポートすることです。
sudo -u postgres pg_dumpall --cluster 9.6/main > dump.sql
sudo -u postgres psql -d postgres --cluster 13/main -f dump.sql
バラよりhttps://decatec.de/linux/postgresql-upgrade-auf-neue-version-durchfuehren
答え2
また、バージョン1.72.0以降、Synapseはバージョン11より前にPostgresqlのサポートを停止したため、アップグレードする必要がありました。
コンテキスト:インストールはdocker-composeを介して行われ、/opt/synapse
postgresコンテナは次のように定義されます。
db:
image: docker.io/postgres:10-alpine
shm_size: 1gb
restart: unless-stopped
environment:
- POSTGRES_USER=synapse
- POSTGRES_PASSWORD=my_postgres_password
- POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
volumes:
- ./schemas:/var/lib/postgresql/data
これはpostgresデータファイルです/opt/synapse/schemas
。
使ったhttps://github.com/tianon/docker-postgres-upgradePostgres データのアップグレードを実行します。
postgres
問題があります。以前の(バージョン11)インストールには役割(ユーザー)はありません。以前のインストールと新しいインストールの両方が同じユーザーを使用できる必要があるため、役割を使用するようにpg_upgradeスクリプトを指定し、新しい(バージョン15)データベースを手動で起動してsynapse
この問題を解決しました。
ステップごとに次のように進みます。
- バックアップデータ:
cp -a schemas schemas-v11-backup
docker-postgres-upgrade
期待どおりにフォルダ構造を作成します。
mkdir -p upgradepg/10/data
mkdir -p upgradepg/15/data
- 以前のpostgresデータを「OLD」ディレクトリにコピーします。
cp -a schemas/* upgradepg/10/data/
schemas
postgresバージョン15データファイルに初期化できるようにpostgresデータフォルダをクリーンアップします。rm -rf schemas/*
- postgresのバージョンを
docker-compose.yml
15に変更し(->フル行はimage: docker.io/postgres:15-alpine
)サービスを開始しますdocker-compose up db
。これにより、synapse
userとDatabaseがデータベースコンテナをブートストラップしますsynapse
。 pg_upgrade
ただし、古いデータ(=以前のデータベース)は移行され、名前がデータベースの場合は失敗しますsynapse
。データベースを削除する必要があります。
docker-compose exec db psql -U synapse
\c postgres
drop database synapse;
exit
- 実行中のpostgres 15コンテナを停止します(ターミナルにバインドされている場合はCtrl + C、それ以外の場合
docker-compose stop db
)。 - 新しく起動したpostgres 15データディレクトリを次の場所にコピーします
upgradepg/15/data
。cp schemas/* upgradepg/15/data/
- 移行ツールを実行します。
docker run --rm -v /opt/synapse/upgradepg:/var/lib/postgresql tianon/postgres-upgrade:10-to-15 -U synapse
(-U synapseはpg_upgrade
userを使用しますsynapse
)。端末の出力は次に終了する必要があります。
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade.
Once you start the new server, consider running:
/usr/lib/postgresql/15/bin/vacuumdb -U synapse --all --analyze-in-stages
- 移行したデータを Synapse db コンテナのデータディレクトリにコピーします。
cp -a upgradepg/15/data/* schemas/
- 何らかの理由でユーザーパスワードが設定されていないため、
synapse
シナプスがデータベースに接続できなくなりました。パスワード認証が機能していることを確認するには、データベースコンテナを起動してsynapse
ユーザーパスワードを設定します。
docker-compose up db
(in another terminal, in /opt/synapse):
docker-compose exec db psql -U synapse
alter role synapse with password 'your_synapse_pw_from_docker-compose.yml';
exit
それはすべてです。クリーンアップするには、upgradepg
(シナプティックが正常に機能した後)を削除しますschemas-v11-backup
。