Discourse yedekleme pg_dump hatası ve çözümü: pg_dump: error: server version: 12|13|14|*; pg_dump version: 12|13|14|*

Discourse forum sistemlerinde yedekleme yaparken karşınıza çıkabilecek bir hata sunucudaki pg_dump versiyonunun, veri tabanı PostgreSQL versiyonundan farklı (yada düşük) olmasından kaynaklanıyor. Bu neden olabilir? Ana sunucuda discourse kullanıyorsanız ve veri tabanını da digitaloceans, amazon yada google gibi veri tabanı sunucularında çalıştırıyorsanız versiyon uyuşmazlığı olacak ve discourse 'u yedekleyemeyeceksiniz.

Bu iyi bir şey değildir, çünkü yılların tecrübesiyle yedeksiz bir çalışma yürütmenin riskleri ciddi sonuçlar doğurabilir. Bu sebeple her daim yedek almayı ve sisteminizin yedeklerini oluşturmayı otomatik hale getirmeyi düşünmelisiniz, acilen.

Şimdi bu konuda da karşılaştığım bu hatanın çözümünü anlatacağım.

Discourse kurulu bir sitenin veri tabanını ayrı bir sunucuya taşıdık ve bu sunucudaki PostgreSQL versiyonu 14 (siz bu konuyu okurken yeni versiyonlar çıkmış olabilir). Ancak discourse kurulu sunucudaki PostgreSQL versiyonu 13 olduğu için pg_dump versiyon uyuşmuyor hatası veriyor, discourse yedeklemesi yapılamıyordu. Örnek bir hata:

[2022-02-10 15:16:15] pg_dump: error: server version: 14.1; pg_dump version: 13.1 (Debian 13.1-1.pgdg110+1)
[2022-02-10 15:16:15] pg_dump: error: aborting because of server version mismatch
[2022-02-10 15:16:15] EXCEPTION: pg_dump failed

Discourse ekibi kurulum için docker kullanıyor ve söylediklerine göre PostgreSQL versiyonunu her güncellemede yeni versiyona yükseltmiyorlar. Bunun yerine PostgreSQL sistemini 2 versiyonunda bir güncelliyorlar. Örnek son discourse versiyonundaki PostgreSQL 10 ise, PostgreSQL 12 versiyonu çıkarsa discourse yeni güncellemede bu versiyona yer verecektir.

Bu versiyon uyuşmazlığını çözmek için ana sunucudaki yani discourse sunucusundaki PostgreSQL versiyonunu yükseltmeniz gerekiyor. Yükseltme işlemini de o anki kurulu PostgreSQL’ i silip yerine yeni versiyon PostgreSQL kurarak yapabiliriz. Eski versiyonu silmeden nasıl yapılır bilmiyorum, mecbur silinmesi gerekiyor sanırım. Başlamak için discourse kurulu sunucuya ssh ile bağlanın ve discourse kurulu klasöre gidin:

cd /var/discourse

Aşağıdaki kod ile discourse docker sunucuna giriş yapalım:

./launcher enter app

Sonrasında kurulu olan PostgreSQL 'yi silelim:

apt-get remove postgresql-client-common

Ve yeni versiyonu kuralım, aşağıdaki kodları sırasıyla çalıştırın:

apt-get update
sudo apt-get install postgresql

Kurulum işlemi sırasında onay isteyecek, y yaparak onaylayın ve kurulumu tamamlayın. Kurulum yaparken versiyonun veri tabanı ile aynı olup olmadığını kontrol edin, eğer bu basit kurulum ile veri tabanı versiyonu ile aynı versiyonu kurmuyorsa alternatif bir kurulum yolu aramanız ve veri tabanıyla aynı PostgreSQL versiyonunu kurmalısınız.

Bu işlemlerden sonra veri tabanı postgresql ve discourse sunucusundaki PostgreSQL versiyonu aynı olduğunda artık discourse admin panelinden yedekleme yapabiliyor olmalısınız. Eğer hala sorun yaşıyorsanız ve farklı hatalar ile karşılaşıyorsanız lütfen bu konu altından bunu bize hata kodunuz ve yaptığınız işlemleri anlatarak paylaşın. Bu şekilde bu makaleyi güncelleyerek güncel sorunlardan da bahsedebiliriz.