Veritabanları zamanla büyür ve bazen orijinal dosya sistemlerindeki alanı aşar. İşletim sisteminin geri kalanıyla aynı bölüme yerleştirildiklerinde G/Ç büyümesiyle de karşılaşabilirsiniz. RAID, ağ bloğu depolaması ve diğer aygıtlar, artıklık ve istenen diğer özellikleri sunabilir. İster daha fazla alan ekliyor, ister performansı optimize etmenin yollarını değerlendiriyor veya diğer depolama özelliklerinden yararlanmak istiyor olun, bu eğitim PostgreSQL’in veri depolama alanını nasıl değiştirebileceğimizi ele alalım.
Mevcut yapımda sda dizini üzerinde database bulunmaktaydı fakat db büyümesi ile birlikte sürekli sda diskini genişletmek durumunda kalıyorduk. Bu durumlarda OS alanını büyütmek yerine yeni bir disk ekleyip sadece onu genişletmek daha faydalı olacaktır. Aynı Windows sistemlerde Sql DB alanını farklı yere yüklediğimiz gibi.
PostgreSQL’in veri dizinini taşımaya hazırlanmak için etkileşimli bir PostgreSQL oturumu başlatarak mevcut konumu doğrulayalım. Aşağıdaki satırda, psql etkileşimli monitöre girme komutudur ve -u postgres, sudo’ya psql’yi sistemin postgres kullanıcısı olarak çalıştıralım.
sudo -u postgres psql
Postgres üzerinde varsayılan data lokasyonunu sorgulayalım,
postgres=# SHOW data_directory;
Output data_directory ------------------------------ /var/lib/postgresql/14/main (1 row)
Bu çıktı ile, PostgreSQL’in varsayılan veri dizini /var/lib/postgresql/14/main’i kullanacak şekilde yapılandırıldığını gösterir, yani taşımamız gereken dizin budur. Sisteminizdeki dizini onayladıktan sonra, çıkmak için \q yazarak postgres modundan çıkış yapalım..
Verilerin bütünlüğünü sağlamak için, veri dizininde gerçekten değişiklik yapmadan önce PostgreSQL’i durduracağız.
sudo systemctl stop postgresql
systemctl, tüm hizmet yönetimi komutlarının sonucunu göstermez. İşlemi tamamladığımızı doğrulamak için aşağıdaki komutu kullanalım.
sudo systemctl status postgresql
Yeni konumumuzdaki orijinal dizin yapısını eşitlemek için rsync’i postgresql dizininden başlatacağız. Bu postgresql dizinini mount-point dizini içinde oluşturarak ve PostgreSQL kullanıcısının sahipliğini koruyarak, gelecekteki yükseltmeler için izin sorunlarını önleyebiliriz. Sürüm dizini, 14, konumu açıkça postgresql.conf dosyasında tanımladığımız için kesinlikle gerekli değildir, ancak özellikle gelecekte PostgreSQL’in birden çok sürümünü çalıştırmaya ihtiyaç varsa, proje kuralına uymak kesinlikle zarar vermez. .
sudo rsync -av /var/lib/postgresql /database/postgres
Kopyalama tamamlandığında, geçerli klasörü .bak uzantısıyla yeniden adlandıracağız ve taşımanın başarılı olduğunu onaylayana kadar yedeğimizi saklayacağız. Yeniden adlandırarak, hem yeni hem de eski konumdaki dosyalardan kaynaklanabilecek karışıklığı önleyeceğiz:
sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak
PostgreSQL’in yapılandırma değerlerini geçersiz kılmanın birkaç yolu vardır. /etc/postgresql/14/main/postgresql.conf dosyasında varsayılan olarak data_directory /var/lib/postgresql/14/main olarak ayarlanmıştır. Bu dosyayı yeni veri dizinini yansıtacak şekilde düzenleyelim.
sudo vi /etc/postgresql/14/main/postgresql.conf
data_directory ile başlayan satırı bulun ve takip eden yolu yeni konumu yansıtacak şekilde değiştirin.
Bizim durumumuzda, güncellenen dosya aşağıdaki çıktıya benzer bi sonuç verecektir.
. . . data_directory = '/database/postgres/14/main' . . .
Değişikliği gerçekleştirdikten sonra Postgres servislerini başlatalım.
sudo systemctl start postgresql sudo systemctl status postgresql
Yeni veri alanının gerçekten kullanımda olduğundan emin olmak için PostgreSQL monitor modda başlatın.
sudo -u postgres psql
postgres=# SHOW data_directory;
Output data_directory ----------------------------------------- /database/postgres/14/main (1 row)
Artık PostgreSQL’i yeniden başlattığınıza ve yeni konumu kullandığını onayladığınıza göre, veritabanınızın tamamen işlevsel olduğundan emin olma fırsatını değerlendirin. Mevcut verilerin bütünlüğünü doğruladıktan sonra, yedek veri dizinini silebiliriliz.
sudo rm -Rf /var/lib/postgresql/14/main.bak
Beklendiği gibi çalıştığından emin olmak için PostgreSQL’i son bir kez yeniden başlatın:
sudo systemctl restart postgresql sudo systemctl status postgresql
İşlemi başarı ile tamamladık, harika!