DBAtlas · Veritabanı operasyon atlası

pg_upgrade --link ile major sürüm yükseltmesi (uçtan uca runbook)

PostgreSQLUpgrade

Komut

# postgres kullanıcısıyla, yazılabilir bir dizinde; örnek 16 -> 17
export OLD_BIN=/usr/pgsql-16/bin NEW_BIN=/usr/pgsql-17/bin
export OLD_DATA=/var/lib/pgsql/16/data NEW_DATA=/var/lib/pgsql/17/data
# 0) Yeni kümeyi eski ile aynı encoding/locale ve checksum ayarıyla initdb et (eski kümede checksum açıksa -k)
# 1) Uyumluluk kontrolü (eski küme çalışırken yapılabilir, veri değiştirmez):
$NEW_BIN/pg_upgrade --old-bindir=$OLD_BIN --new-bindir=$NEW_BIN --old-datadir=$OLD_DATA --new-datadir=$NEW_DATA --check
# 2) Eski kümeyi durdur ve hard link ile yükselt:
$OLD_BIN/pg_ctl -D $OLD_DATA stop -m fast
$NEW_BIN/pg_upgrade --old-bindir=$OLD_BIN --new-bindir=$NEW_BIN --old-datadir=$OLD_DATA --new-datadir=$NEW_DATA --link --jobs=4
# 3) postgresql.conf/pg_hba.conf özelleştirmelerini yeni kümeye taşı, başlat:
$NEW_BIN/pg_ctl -D $NEW_DATA -l /tmp/pg17_start.log start
# 4) İstatistikleri topla, gerekiyorsa üretilen betikleri çalıştır:
$NEW_BIN/vacuumdb --all --analyze-in-stages
# psql -X -f update_extensions.sql   (pg_upgrade ürettiyse)
# 5) Doğrulama ve yeni yedek sonrası eski kümeyi sil:
./delete_old_cluster.sh

Ne yapar?

Önce --check ile uyumluluğu doğrular, ardından eski kümenin veri dosyalarını kopyalamadan hard link ile yeni sürüme bağlayarak major yükseltmeyi veri boyutundan bağımsız olarak dakikalar içinde yapar; sonrasında istatistikleri aşamalı toplar ve eski kümeyi temizler.

Ne zaman kullanılır?

Kabul edilebilir kısa bir kesintiyle (dakikalar) büyük bir kümeyi yerinde yeni major sürüme taşımak için.

Dikkat

--link ile yeni küme bir kez başlatıldıktan sonra eski küme artık güvenle kullanılamaz; geri dönüş yolu yalnızca yükseltme öncesi alınan yedektir. Eski ve yeni veri dizini aynı dosya sisteminde olmalı. Yeni kümede istatistik yokken (analyze bitene kadar) planlar kötü olabilir. pgBackRest kullanıyorsan stanza-upgrade çalıştırıp hemen yeni bir full yedek al; eski sürümün yedekleri yeni kümeye restore edilemez.

DBAtlas'ta aç →

İlgili