- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2021-11-08T00:49:01+00:00","default:wikiadmin","wikiadmin")
#author("2022-01-07T02:34:07+00:00","default:wikiadmin","wikiadmin")
-2016年以来使ってなかったが必要に迫られてバージョンアップの手段検討
#contents
*pg_upgrade [#f81e2220]
*バージョンアップ手法をバックアップ手段ごとに検証 [#k7be4a79]
**pg_upgrade [#f81e2220]
-流用できるファイルシステムを極力利用して、アップグレードを行う。
-一番早いらしい
*pg_dumpall [#m76c28a0]
**試してみた。移行先のディレクトリは空である必要がある。 [#v73cfd63]
docker run --rm -v /var/lib/docker/volumes/sonarqube_postgres_data79/_data:/var/lib/postgresql/9.6/data -v /var/lib/docker/volumes/sonarqube_postgresql_data_13/_data:/var/lib/postgresql/13/data tianon/postgres-upgrade:9.6-to
**pg_dumpall [#m76c28a0]
-昔からの定番
-テキストで出力できるので、中身がわかりやすい。
**ファイルシステムごとバックアップ [#c76eda66]
-メジャーバージョンが違うと使えない。
***Docker上のファイルシステムをバックアップ [#w21f74bd]
-sonarqube_postgresql_dataボリュームをローカルの/var/tmpに取得
sudo docker run --rm -v sonarqube_postgresql_data:/var/lib/postgresql/data -v /var/tmp:/backup ubuntu tar cvfP /backup/pgdata-20211113.tar /var/lib/postgresql/data
-ボリュームを削除して作成し直す
sudo docker run --rm -v sonarqube_postgresql_data:/var/lib/postgresql/data -v /var/tmp:/backup ubuntu tar xvf /backup/pgdata-20211113.tar
*Docker上でのバージョンアップ [#k3dd80ab]
**docker-postgres-upgrade [#w52d5b13]
https://qiita.com/y-amadatsu/items/2d43ce49c77f1f1df434
物理ディレクトリに対してpg_upgradeを実行する。
docker run --rm -e PGUSER=sonar -e POSTGRES_INITDB_ARGS="-U $POSTGRES_USER" \
-v /var/lib/docker/volumes/sonarqube_postgresql_data/_data:/var/lib/postgresql/9.6/data/ \
-v /var/lib/docker/volumes/sonarqube_postgresql_data_13/_data:/var/lib/postgresql/13/data/ \
tianon/postgres-upgrade:9.6-to-13
**pg_dumpall/psql [#t692a976]
https://betterprogramming.pub/how-to-upgrade-your-postgresql-version-using-docker-d1e81dbbbdf9
まとめると
+旧コンテナーでdump
+旧コンテナーのボリューム削除(切り戻し考えると残しても良い)
+新コンテナ立ち上げ
+新コンテナにdump流し込む
**実際に検証した [#j2f3088b]
# 旧DBからデータをdump
docker-compose exec db pg_dumpall -U sonar > dump.sql
# volume消してバージョンアップ実施
# 新サーバーでsonarのDBを消す(ある場合)
sonarqube止める。
psql -U sonar -d postgres
drop database sonar
CREATE DATABASE sonar WITH TEMPLATE = template0 ENCODING = 'UTF8' LOCALE = 'en_US.utf8';
# 新サーバーにdumpを流し込む(docker-composeは使えない。DB削除と空のDB作成必要)
cat dump2.sql | docker exec -i コンテナID psql -U sonar -d sonar
# mariadbでも試してみた
cat mysqldump.sql | sudo docker exec -i 11c75385bdad mysql -u root -ppassword