#author("2022-01-07T02:27:31+00:00","default:wikiadmin","wikiadmin")
#author("2022-01-07T02:34:07+00:00","default:wikiadmin","wikiadmin")
-2016年以来使ってなかったが必要に迫られてバージョンアップの手段検討

#contents

*バージョンアップ手法をバックアップ手段ごとに検証 [#k7be4a79]

**pg_upgrade [#f81e2220]

-流用できるファイルシステムを極力利用して、アップグレードを行う。
-一番早いらしい

**試してみた。移行先のディレクトリは空である必要がある。 [#v73cfd63]

docker run --rm -v /var/lib/docker/volumes/sonarqube_postgres_data79:/var/lib/postgresql/9.6/data -v /var/lib/docker/volumes/sonarqube_postgresql_data_13:/var/lib/postgresql/13/data tianon/postgres-upgrade:9.6-to-13
 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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS