내 서버에 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
.