매트릭스 시냅틱 postgresql 데이터베이스를 9.6에서 11로 업그레이드

매트릭스 시냅틱 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/data.cp 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.

관련 정보