Matrix Synaptic postgresqlデータベースを9.6から11にアップグレードする

Matrix Synaptic postgresqlデータベースを9.6から11にアップグレードする

私のサーバーには、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/synapsepostgresコンテナは次のように定義されます。

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この問題を解決しました。

ステップごとに次のように進みます。

  1. バックアップデータ:cp -a schemas schemas-v11-backup
  2. docker-postgres-upgrade期待どおりにフォルダ構造を作成します。
mkdir -p upgradepg/10/data
mkdir -p upgradepg/15/data
  1. 以前のpostgresデータを「OLD」ディレクトリにコピーします。 cp -a schemas/* upgradepg/10/data/
  2. schemaspostgresバージョン15データファイルに初期化できるようにpostgresデータフォルダをクリーンアップします。rm -rf schemas/*
  3. postgresのバージョンをdocker-compose.yml15に変更し(->フル行はimage: docker.io/postgres:15-alpine)サービスを開始しますdocker-compose up db。これにより、synapseuserとDatabaseがデータベースコンテナをブートストラップしますsynapse
  4. pg_upgradeただし、古いデータ(=以前のデータベース)は移行され、名前がデータベースの場合は失敗しますsynapse。データベースを削除する必要があります。
docker-compose exec db psql -U synapse
\c postgres
drop database synapse;
exit
  1. 実行中のpostgres 15コンテナを停止します(ターミナルにバインドされている場合はCtrl + C、それ以外の場合docker-compose stop db)。
  2. 新しく起動したpostgres 15データディレクトリを次の場所にコピーしますupgradepg/15/datacp schemas/* upgradepg/15/data/
  3. 移行ツールを実行します。docker run --rm -v /opt/synapse/upgradepg:/var/lib/postgresql tianon/postgres-upgrade:10-to-15 -U synapse(-U synapseはpg_upgradeuserを使用します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
  1. 移行したデータを Synapse db コンテナのデータディレクトリにコピーします。cp -a upgradepg/15/data/* schemas/
  2. 何らかの理由でユーザーパスワードが設定されていないため、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

関連情報