Takip et

PostgreSQL Veri Dizinini Ubuntu 18.04’te Yeni Bir Konuma Taşıma

PostgreSQL Veri Dizinini Ubuntu 18.04’te Yeni Bir Konuma Taşıma Giriş PostgreSQL, açık kaynaklı ve güçlü bir ilişkisel veritabanı yönetim

PostgreSQL Veri Dizinini Ubuntu 18.04’te Yeni Bir Konuma Taşıma

Giriş

PostgreSQL, açık kaynaklı ve güçlü bir ilişkisel veritabanı yönetim sistemidir (RDBMS). Uygulamaların ve hizmetlerin temelini oluşturan verilerin depolanmasında kritik bir rol oynar. Zamanla, bir PostgreSQL kurulumunun veri dizini, disk alanı yetersizliği, performans optimizasyonu, ayrı bir depolama birimine geçiş, yedekleme stratejilerini iyileştirme veya sistem mimarisini düzenleme gibi çeşitli nedenlerle farklı bir konuma taşınma ihtiyacı duyabilir. Bu teknik makale, Ubuntu 18.04 işletim sistemi üzerinde çalışan bir PostgreSQL veri dizinini güvenli ve etkili bir şekilde yeni bir konuma nasıl taşıyacağınızı adım adım açıklamaktadır.

Veri dizinini taşımak, hassas bir işlem olup yanlış yapıldığında veri kaybına yol açabilir. Bu nedenle, her adımın dikkatlice takip edilmesi ve özellikle yedekleme adımlarının atlanmaması büyük önem taşır. Bu rehber, olası riskleri en aza indirerek sorunsuz bir geçiş sağlamayı amaçlamaktadır.

Ön Hazırlıklar ve Güvenlik Tedbirleri

Veri taşıma işlemine başlamadan önce, sisteminizin ve verilerinizin güvenliğini sağlamak için bazı önemli hazırlıklar yapmanız gerekmektedir. Bu adımlar, olası sorunlarda geri dönüş noktası sağlamanın yanı sıra, taşıma işleminin başarılı bir şekilde tamamlanması için gerekli ortamı hazırlar.

Veri Yedekleme

Herhangi bir kritik sistem değişikliğinde olduğu gibi, PostgreSQL veri dizinini taşımadan önce mevcut veritabanlarınızın tam bir yedeğini almak mutlak surette gereklidir. Bu yedek, beklenmedik bir hata durumunda verilerinizi kurtarmanızı sağlayacak cankurtaranınızdır. İki temel yedekleme yöntemi önerilir:

Mantıksal Yedekleme (pg_dumpall)

Bu yöntem, tüm veritabanlarını, rolleri, tabloları ve diğer veritabanı nesnelerini SQL komutları şeklinde yedekler. Bu, platform bağımsız bir yedekleme olup, geri yükleme esnekliği sunar.

sudo -u postgres pg_dumpall > /path/to/your/backup/all_databases_backup.sql

/path/to/your/backup/ kısmını yedek dosyanızı saklamak istediğiniz güvenli bir dizinle değiştirin. Bu dizinin yeni veri dizini konumunda veya mevcut PostgreSQL veri dizininde olmaması önemlidir. Tercihen harici bir depolama birimi veya farklı bir disk bölümü kullanılmalıdır.

Fiziksel Yedekleme (Dizin Kopyalama)

PostgreSQL servisi durdurulduktan sonra veri dizininin doğrudan kopyalanması, taşıma işlemi sırasında bir sorun yaşanması durumunda mevcut durumu geri yüklemek için hızlı bir yol sağlar. Bu, bir nevi “anlık görüntü” yedeklemesidir.

sudo cp -Rp /var/lib/postgresql/10/main /path/to/your/backup/postgresql_data_backup_$(date +%Y%m%d%H%M)

Burada /var/lib/postgresql/10/main varsayılan PostgreSQL 10 veri dizini yoludur. Kendi PostgreSQL sürümünüze göre bu yolu ayarlamanız gerekebilir (örneğin, PostgreSQL 12 için /var/lib/postgresql/12/main). -R dizinleri özyinelemeli olarak kopyalar, -p ise izinleri ve zaman damgalarını korur.

Sistem Bilgilerini Kontrol Etme

Taşıma işlemine başlamadan önce mevcut PostgreSQL kurulumunuz hakkında bazı temel bilgileri edinmek faydalıdır:

* PostgreSQL Sürümü: Genellikle /etc/postgresql/ altında sürüm numarasına göre dizinler bulunur (örn. 10, 12, 14).
* Mevcut Veri Dizini Konumu: PostgreSQL komut satırından bağlanarak bu bilgiyi edinebilirsiniz:

sudo -u postgres psql -c "SHOW data_directory;"

Bu komut size mevcut veri dizininin tam yolunu gösterecektir, örneğin /var/lib/postgresql/10/main.
* PostgreSQL Servis Durumu: Servisin çalıştığından emin olun.

sudo systemctl status postgresql

* Yeni Konumda Disk Alanı: Yeni veri dizinini taşıyacağınız disk bölümünde yeterli boş alan olduğundan emin olun. Mevcut veri dizininin boyutunu kontrol edin ve yeni konumda en az aynı miktarda, hatta biraz daha fazla boş alan olduğundan emin olun.

du -sh /var/lib/postgresql/10/main # Mevcut dizin boyutu
    df -h /mnt/new_disk_mount_point # Yeni konumdaki boş alan

Yeni Konumun Hazırlanması

Veri dizinini taşıyacağınız yeni konumda gerekli dizin yapısını oluşturmanız ve doğru sahiplik ile izinleri ayarlamanız gerekmektedir.

* Yeni Dizin Oluşturma: Yeni veri dizini için bir ana dizin ve ardından sürüm ve küme adı için alt dizinler oluşturun. Örneğin, /mnt/new_disk/postgresql/10/main gibi bir yapı kullanabilirsiniz.

sudo mkdir -p /mnt/new_disk/postgresql/10/main

Burada /mnt/new_disk yeni disk bölümünüzün bağlama noktası olabilir. Bu yolu kendi sisteminize göre ayarlayın.
* Sahiplik ve İzinleri Ayarlama: PostgreSQL veri dizini, postgres kullanıcısı ve grubuna ait olmalı ve yalnızca bu kullanıcı tarafından okunabilir ve yazılabilir olmalıdır. Bu, güvenlik için kritik öneme sahiptir.

sudo chown -R postgres:postgres /mnt/new_disk/postgresql/10/main
    sudo chmod -R 0700 /mnt/new_disk/postgresql/10/main

0700 izinleri, yalnızca dizin sahibinin (yani postgres kullanıcısının) okuma, yazma ve yürütme (dizinler için gezinme) haklarına sahip olduğu anlamına gelir. Başka hiçbir kullanıcı veya grup bu dizine erişemez.

PostgreSQL Servisini Durdurma

Veri dizinini taşımadan önce PostgreSQL servisini tamamen durdurmak zorunludur. Servis çalışırken veri dizinini taşımaya çalışmak, veri bozulmasına ve geri dönüşü olmayan hatalara yol açabilir.

sudo systemctl stop postgresql

Servisin başarıyla durdurulduğunu doğrulamak için aşağıdaki komutu kullanabilirsiniz:

sudo systemctl status postgresql

Çıktıda Active: inactive (dead) veya benzeri bir durum görmelisiniz.

Veri Dizinini Taşıma

PostgreSQL servisi durdurulduktan ve yeni konum hazırlandıktan sonra, mevcut veri dizinini yeni konuma taşıyabiliriz. Bu işlem için rsync komutunu kullanmak, büyük dizinler için daha güvenli ve bilgilendirici bir yöntemdir.

rsync ile Taşıma

rsync, dosyaları ve dizinleri kopyalamak ve senkronize etmek için güçlü bir araçtır. Özellikle büyük veri dizinlerini taşırken ilerleme göstergesi sunması, ağ üzerinden kopyalama yapabilmesi ve hatalara karşı daha dirençli olması nedeniyle tercih edilir.

sudo rsync -av /var/lib/postgresql/10/main/ /mnt/new_disk/postgresql/10/main/

Bu komuttaki parametrelerin anlamları:
* -a (archive): Arşiv modu; özyinelemeli kopyalama, sembolik bağlantıları koruma, izinleri, sahipliği, zaman damgalarını koruma gibi birçok şeyi içerir.
* -v (verbose): Ayrıntılı çıktı verir, kopyalanan dosyaları gösterir.
/var/lib/postgresql/10/main/ (kaynak): Mevcut PostgreSQL veri dizininin yolu. Sondaki eğik çizgi (/), dizinin içeriğinin* kopyalanacağı anlamına gelir, dizinin kendisinin değil.
* /mnt/new_disk/postgresql/10/main/ (hedef): Yeni veri dizini konumu.

Taşıma işlemi tamamlandıktan sonra, eski veri dizinini hemen silmek yerine, bir yedek olarak yeniden adlandırmak iyi bir uygulamadır. Bu, herhangi bir sorun yaşanması durumunda kolayca geri dönebilmenizi sağlar.

sudo mv /var/lib/postgresql/10/main /var/lib/postgresql/10/main_old

PostgreSQL Yapılandırmasını Güncelleme

Veri dizini yeni konumuna taşındıktan sonra, PostgreSQL’e bu değişikliği bildirmeniz gerekir. Bu, postgresql.conf yapılandırma dosyasında yapılır.

postgresql.conf Dosyasını Düzenleme

postgresql.conf dosyası, PostgreSQL sunucusunun davranışını kontrol eden ana yapılandırma dosyasıdır. Ubuntu’da bu dosya genellikle /etc/postgresql//main/postgresql.conf yolunda bulunur.

1. Yapılandırma Dosyasını Açma:

sudo nano /etc/postgresql/10/main/postgresql.conf

PostgreSQL sürümünüze göre yolu ayarlamayı unutmayın.

2. data_directory Parametresini Bulma ve Güncelleme:
Dosya içinde data_directory parametresini arayın. Genellikle yorum satırı olarak (başında # işaretiyle) bulunur ve varsayılan yolu gösterir.

#data_directory = 'var/lib/postgresql/10/main'     # use data in another directory

Bu satırı bulun, yorum işaretini kaldırın (#) ve değerini yeni veri dizini konumunuza ayarlayın:

data_directory = '/mnt/new_disk/postgresql/10/main'

Eğer dosyada birden fazla data_directory girişi varsa, yalnızca birinin yorum satırı olmadığından ve doğru yolu gösterdiğinden emin olun. Diğerlerini yorum satırı yapın veya silin.

3. Dosyayı Kaydetme ve Çıkma:
Nano düzenleyicisinde, Ctrl+O tuşlarına basarak kaydedin, ardından Enter tuşuna basın ve Ctrl+X tuşlarına basarak çıkın.

Yeni Konumun İzinlerini Kontrol Etme

Daha önce yeni dizini oluştururken izinleri ayarlamış olsak da, taşıma işlemi veya yapılandırma değişiklikleri sırasında yanlışlıkla değişmiş olabileceği ihtimaline karşı izinleri ve sahipliği tekrar kontrol etmek iyi bir adımdır. PostgreSQL’in yeni veri dizinine erişebilmesi için doğru izinlere sahip olması kritik öneme sahiptir.

sudo chown -R postgres:postgres /mnt/new_disk/postgresql/10/main
sudo chmod -R 0700 /mnt/new_disk/postgresql/10/main

Bu komutlar, yeni veri dizininin ve tüm alt dizinleri ile dosyalarının postgres kullanıcısı ve grubuna ait olmasını sağlar ve yalnızca bu kullanıcıya tam erişim yetkisi verir.

PostgreSQL Servisini Başlatma ve Doğrulama

Tüm yapılandırma değişiklikleri yapıldıktan ve izinler kontrol edildikten sonra, PostgreSQL servisini başlatabilir ve taşıma işleminin başarılı olup olmadığını doğrulayabiliriz.

1. PostgreSQL Servisini Başlatma:

sudo systemctl start postgresql

2. Servis Durumunu Kontrol Etme:
Servisin başarıyla başlatılıp başlatılmadığını kontrol edin.

sudo systemctl status postgresql

Active: active (exited) veya Active: active (running) gibi bir durum görmelisiniz. Eğer servis başlamazsa veya hata verirse, sonraki “Sık Karşılaşılan Sorunlar ve Çözümleri” bölümüne bakın.

3. PostgreSQL Loglarını Kontrol Etme:
Herhangi bir hata veya uyarı için PostgreSQL loglarını kontrol etmek çok önemlidir.

sudo journalctl -u postgresql -f

veya doğrudan log dosyalarını kontrol edebilirsiniz:

sudo tail -f /var/log/postgresql/postgresql-10-main.log

Loglarda FATAL veya ERROR mesajları arayın.

4. Veri Dizini Konumunu Doğrulama:
psql ile PostgreSQL’e bağlanarak yeni data_directory konumunun doğru ayarlandığını doğrulayın.

sudo -u postgres psql

psql komut isteminde:

SHOW data_directory;

Bu komutun çıktısı, postgresql.conf dosyasında belirttiğiniz yeni yolu (/mnt/new_disk/postgresql/10/main) göstermelidir.

5. Veritabanlarını ve Verileri Test Etme:
Veritabanlarınızın listesini görüntüleyin, tablolara sorgular çalıştırın ve verilerinize erişebildiğinizden emin olun. Tüm uygulamalarınızın ve hizmetlerinizin veritabanına sorunsuz bir şekilde bağlanabildiğini ve beklendiği gibi çalıştığını doğrulayın.

\l  -- Veritabanlarını listeler
    \c your_database_name -- Bir veritabanına bağlanın
    \dt -- Tabloları listeler
    SELECT * FROM your_table_name LIMIT 10; -- Bir tablodan veri sorgulayın

Eski Veri Dizinini Kaldırma

PostgreSQL servisi yeni konumdan başarıyla çalışıyor ve tüm verilerinizin erişilebilir olduğunu doğruladıktan sonra, eski veri dizinini güvenli bir şekilde kaldırabilirsiniz. Bu adımı, yeni sistemin birkaç gün veya hafta boyunca sorunsuz çalıştığından emin olmadan yapmamanız şiddetle tavsiye edilir. Eski dizini main_old olarak yeniden adlandırmıştık, şimdi onu silebiliriz.

sudo rm -rf /var/lib/postgresql/10/main_old

Bu komutu çalıştırmadan önce, yedeklerinizin güncel olduğundan ve yeni sistemin kararlı çalıştığından kesinlikle emin olun. Bu komut geri alınamaz.

Sık Karşılaşılan Sorunlar ve Çözümleri

Veri dizinini taşıma işlemi sırasında veya sonrasında bazı sorunlarla karşılaşmak mümkündür. İşte en yaygın sorunlar ve bunların çözümleri:

İzin Hataları

Belirti: PostgreSQL servisi başlamaz ve loglarda FATAL: could not open directory "..." Permission denied veya FATAL: data directory "/..." has wrong ownership gibi mesajlar görünür.
Neden: Yeni veri dizini veya içindeki dosyalar postgres kullanıcısı ve grubuna ait değildir veya doğru izinlere sahip değildir.
Çözüm: Yeni veri dizininin sahipliğini ve izinlerini doğru şekilde ayarlayın.

sudo chown -R postgres:postgres /mnt/new_disk/postgresql/10/main
sudo chmod -R 0700 /mnt/new_disk/postgresql/10/main

Yapılandırma Dosyası Hataları

Belirti: PostgreSQL servisi başlamaz ve loglarda FATAL: unrecognized configuration parameter "data_directory" veya FATAL: multiple data_directory specifications gibi mesajlar görünür.
Neden: postgresql.conf dosyasında data_directory parametresi yanlış yazılmış, iki kez tanımlanmış veya yorum satırı olarak bırakılmıştır.
Çözüm: postgresql.conf dosyasını dikkatlice kontrol edin. data_directory parametresinin doğru yazıldığından, yalnızca bir kez tanımlandığından ve başında # işareti olmadığından emin olun.

Disk Alanı Yetersizliği

Belirti: rsync komutu sırasında veya PostgreSQL servisi başlatılırken disk alanı yetersizliği ile ilgili hatalar.
Neden: Yeni veri dizini için ayrılan disk bölümünde yeterli boş alan yoktur.
Çözüm: Taşıma işlemine başlamadan önce df -h komutuyla hedef disk bölümündeki boş alanı kontrol edin. Gerekirse daha büyük bir disk bölümü hazırlayın veya mevcut bölümü genişletin.

PostgreSQL Başlatılamıyor

Belirti: sudo systemctl start postgresql komutu başarısız olur ve sudo systemctl status postgresql çıktısında hatalar görünür.
Neden: Genellikle izin hataları, yapılandırma hataları veya yeni veri dizinindeki bozuk dosyalar nedeniyle oluşur.
Çözüm:
* Logları kontrol edin: sudo journalctl -u postgresql veya /var/log/postgresql/ altındaki log dosyalarını dikkatlice inceleyin. Hatanın nedenini genellikle burada bulabilirsiniz.
* İzinleri ve sahipliği kontrol edin: Yukarıdaki izin hataları bölümündeki adımları tekrarlayın.
* postgresql.conf dosyasını kontrol edin: data_directory parametresinin doğru ayarlandığından emin olun.
* Yedekten geri yükleme: Eğer hiçbir çözüm işe yaramazsa ve loglar net bir çözüm sunmazsa, fiziksel veya mantıksal yedeklerinizden geri yükleme yapmayı düşünebilirsiniz.

Bağlantı Sorunları

Belirti: PostgreSQL servisi çalışıyor gibi görünse de, uygulamalar veya psql aracı veritabanına bağlanamıyor.
Neden: Genellikle pg_hba.conf dosyasındaki yanlış yapılandırma, güvenlik duvarı kuralları veya ağ ayarları nedeniyle oluşur.
Çözüm:
* pg_hba.conf kontrolü: Bu dosya, istemci bağlantılarına izin veren kuralları içerir. Dosyanın (/etc/postgresql/10/main/pg_hba.conf) doğru yapılandırıldığından emin olun.
* Güvenlik duvarı: Ubuntu’da ufw gibi bir güvenlik duvarı kullanıyorsanız, PostgreSQL’in varsayılan portu olan 5432’nin gelen bağlantılara açık olduğundan emin olun.

sudo ufw status
    sudo ufw allow 5432/tcp

PostgreSQL dinleme adresi: postgresql.conf dosyasındaki listen_addresses parametresinin doğru ayarlandığından emin olun. Tüm arayüzlerden dinlemek için '' olarak ayarlanabilir.

Sonuç

PostgreSQL veri dizinini Ubuntu 18.04 üzerinde yeni bir konuma taşımak, dikkatli planlama ve adım adım uygulama gerektiren kritik bir sistem yönetimi görevidir. Bu rehberde açıklanan adımları izleyerek, veri kaybı riskini en aza indirerek bu işlemi güvenli ve başarılı bir şekilde gerçekleştirebilirsiniz.

Unutulmaması gereken en önemli adımlar:
1. Kapsamlı Yedekleme: Herhangi bir değişikliğe başlamadan önce verilerinizin tam yedeğini aldığınızdan emin olun.
2. Doğru İzinler: Yeni veri dizininin postgres kullanıcısına ve grubuna ait olduğundan ve 0700 izinlerine sahip olduğundan emin olun.
3. Yapılandırma Güncellemesi: postgresql.conf dosyasındaki data_directory parametresini yeni yola işaret edecek şekilde doğru bir şekilde güncelleyin.
4. Doğrulama: PostgreSQL servisini başlattıktan sonra, logları kontrol edin ve tüm veritabanı işlemlerinin beklendiği gibi çalıştığını doğrulayın.

Veri dizinini taşımak, disk alanı yönetimi, performans iyileştirmeleri ve genel sistem esnekliği açısından önemli faydalar sağlayabilir. Bu rehberdeki bilgileri kullanarak, PostgreSQL altyapınızı daha verimli ve güvenli bir şekilde yönetebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.