Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Destek olmak Özel Sunucular

PostgreSQL Veritabanlarının Yedeklenmesi ve Kurtarılması: AlexHost Kullanıcıları için Tam Rehber

PostgreSQL Yedekleme Stratejisinin Düşündüğünüzden Daha Önemli Olmasının Nedenleri

Veri kaybı varsayımsal bir risk değildir — her veritabanı yöneticisinin bir noktada karşılaşacağı operasyonel bir kesinliktir. Donanım arızaları, yanlışlıkla yapılan silmeler, bozuk işlemler ve fidye yazılımı saldırıları, bir üretim ortamını saniyeler içinde çökertebilir. PostgreSQL kullanıcıları için, sağlam, test edilmiş ve otomatik bir yedekleme stratejisine sahip olmak, küçük bir olay ile felaket niteliğinde bir iş başarısızlığı arasındaki farktır.

AlexHost Dedicated Servers, PostgreSQL veritabanlarını barındırmak ve korumak için ideal bir temel sağlar. İstisnai I/O verimlilik sunan kurumsal sınıf NVMe SSD depolama, tam kök erişimi ve tam yapılandırma kontrolü ile birlikte yerleşik DDoS koruması, AlexHost’un ciddi veritabanı iş yükleri için gereken altyapı performansı ve güvenlik duruşunu sağlar.

Yüksek trafikli bir e-ticaret platformu, bir SaaS uygulaması, ilişkisel bir veritabanı tarafından desteklenen bir WordPress kurulumu veya özel bir kurumsal sistem çalıştırıyor olsanız da, bu kılavuz sizi her büyük PostgreSQL yedekleme ve kurtarma yöntemi aracılığıyla yürütür — basit SQL dökümleri ile gelişmiş Point-in-Time Recovery (PITR) — tümü üretim ortamları için optimize edilmiştir.

1. PostgreSQL Yedekleme Seçeneklerini Anlamak

PostgreSQL, birkaç olgun, iyi belgelenmiş yedekleme mekanizması ile birlikte gelir. Doğru olanı seçmek, veritabanı boyutunuz, kurtarma süresi hedefleri (RTO), kurtarma noktası hedefleri (RPO) ve operasyonel karmaşıklık toleransınıza bağlıdır.

YöntemEn İyi KullanımAvantajlarDezavantajlar
SQL Dump (pg_dump)Küçük ve orta ölçekli veritabanlarıBasit, taşınabilir, insan tarafından okunabilirÇok büyük VT’ler için yavaş
Özel Format DumpOrta ve büyük veritabanlarıSıkıştırılmış, paralel geri yüklemeİkili, pg_restore gerektirir
Dosya Sistemi Anlık GörüntüsüÇok büyük veritabanlarıHızlı, tutarlıUzmanlık gerektirir, VT sessiz olmalı veya anlık görüntü farkında olmalı
PITR (WAL Arşivleme)Görev açısından kritik üretim sistemleriAyrıntılı zaman içinde nokta kurtarmaKarmaşık kurulum ve bakım

Başlamadan önce bu dengeleri anlamak esastır. Çoğu üretim ortamı, örneğin gece özel format dumpları ve ayrıntılı kurtarma yeteneği için sürekli WAL arşivleme gibi en az iki yaklaşımı birleştirmekten yararlanır.

2. Ön Koşullar ve Ayrıcalık Gereksinimleri

Herhangi bir yedekleme işlemini gerçekleştirmeden önce, aşağıdaki ön koşulların yerine getirildiğini doğrulayın:

Kullanıcı Ayrıcalıkları:

  • Tam bir yedekleme gerçekleştirmek için PostgreSQL superuser veya hedef veritabanının sahibi olmalısınız.
  • pg_dumpall için superuser ayrıcalıkları zorunludur.

PostgreSQL sürümünüzü doğrulayın:

psql --version

Yedekleme yapmadan önce kullanılabilir disk alanını kontrol edin:

df -h /var/lib/postgresql/

Yedekleme hedefinin yeterli boş alana sahip olduğundan emin olun — geçici dosyalar ve sıkıştırma ek yükünü hesaba katmak için en az yedeklenecek veritabanının boyutunun 1,5 katı.

SSH aracılığıyla sunucunuza bağlanın:

ssh root@your-server-ip

VPS Hosting planı kullanıyorsanız, tam SSH erişimine ve PostgreSQL’i kısıtlama olmaksızın kurma, yapılandırma ve yönetme yeteneğine sahip olacaksınız.

3. Yöntem 1 — pg_dump ile SQL Dump

pg_dump yardımcı programı, en yaygın olarak kullanılan PostgreSQL yedekleme aracıdır. Veritabanı aktif olarak kullanılıyor olsa bile, tek bir veritabanının tutarlı bir anlık görüntüsünü oluşturur. Çıktı, herhangi bir uyumlu PostgreSQL kurulumunda incelenebilen, düzenlenebilen ve yeniden oynatılabilen düz metin SQL betiğidir.

Adım 1: Terminal Açın ve Sunucunuza Erişin

ssh root@your-alexhost-server-ip

Adım 2: pg_dump Komutunu Çalıştırın

pg_dump -U username -W -F p database_name > /backups/backup_file.sql

Parametre açıklaması:

ParametreAçıklama
-U usernameYedeklemeyi gerçekleştiren PostgreSQL kullanıcısı
-WParolayı etkileşimli olarak sor
-F pÇıktı formatı: p = düz SQL metni
database_nameYedeklenecek veritabanının adı
> /backups/backup_file.sqlÇıktıyı bir dosyaya yönlendir

Pratik örnek:

pg_dump -U postgres -W -F p my_production_db > /backups/my_production_db_$(date +%Y%m%d_%H%M%S).sql

> Pro İpucu: Yedekleme dosya adınıza $(date +%Y%m%d_%H%M%S) kullanarak bir zaman damgası eklemek, önceki bir yedeklemeyi yanlışlıkla üzerine yazmanızı asla sağlamaz ve doğal bir kronolojik arşiv oluşturur.

Adım 3: Yedekleme Dosyasını Doğrulayın

ls -lh /backups/
head -50 /backups/my_production_db_*.sql

Dosya, PostgreSQL başlık yorumları ve SET ifadeleriyle başlamalı ve geçerli bir dump’ın oluşturulduğunu doğrulamalıdır.

4. Method 2 — Tüm Veritabanlarını pg_dumpall ile Yedekleme

Bir PostgreSQL örneğindeki her veritabanını yedeklemeniz gerektiğinde — roller ve tablespace’ler gibi genel nesneler dahil — pg_dumpall doğru araçtır.

pg_dumpall -U postgres -W > /backups/all_databases_$(date +%Y%m%d).sql

Bu komut şunları dışa aktarır:

  • Tüm veritabanları
  • Tüm roller (kullanıcılar ve gruplar)
  • Tüm tablespace’ler
  • Tüm genel yapılandırma

Önemli: pg_dumpall çıktı dosyası yoğun sunucularda çok büyük olabilir. Yedekleme bölümünüzün yeterli alana sahip olduğundan emin olun ve çıktıyı hemen sıkıştırmayı düşünün:

pg_dumpall -U postgres | gzip > /backups/all_databases_$(date +%Y%m%d).sql.gz

5. Yöntem 3 — Büyük Veritabanları için Özel Format Yedekleri

Birkaç gigabaytı aşan üretim veritabanları için, özel format (-F c) düz SQL dökümleri yerine kesinlikle önerilir. Özel format yedekleri şunlardır:

  • Varsayılan olarak sıkıştırılmış — depolama gereksinimlerini önemli ölçüde azaltır
  • Geri yükleme açısından daha hızlı-j bayrağı ile paralel geri yükleme işlemlerini destekler
  • Seçici olarak geri yüklenebilir — bireysel tabloları veya şemaları geri yüklemenize izin verir

Özel Format Yedeklemesi Oluşturma

pg_dump -U postgres -W -F c my_production_db > /backups/my_production_db_$(date +%Y%m%d).dump

Sıkıştırılmış Dizin Formatı Yedeklemesi Oluşturma (Paralelizmi Destekler)

pg_dump -U postgres -W -F d -j 4 -f /backups/my_production_db_dir my_production_db
ParametreAçıklama
-F dDizin formatı — tablo başına bir dosya
-j 44 paralel çalışan işlemi kullan
-f /path/to/dirÇıktı dizini (henüz mevcut olmamalı)

Bu yaklaşım, çok çekirdekli sunucularda yedekleme süresini dramatik olarak azaltır ve AlexHost’ta sunulan yüksek performanslı özel sunucu ortamları için idealdir.

6. SQL Dumplarından Geri Yükleme

Düz SQL Dumpından Tek Bir Veritabanını Geri Yükleme

Önce hedef veritabanının var olduğundan emin olun. Yoksa oluşturun:

psql -U postgres -c "CREATE DATABASE my_restored_db;"

Ardından geri yükleyin:

psql -U postgres -d my_restored_db -f /backups/my_production_db_backup.sql

Parametre açıklaması:

ParametreAçıklama
-U postgresPostgreSQL süper kullanıcısı
-d my_restored_dbGeri yükleme için hedef veritabanı
-f /path/to/file.sqlSQL dump dosyasının yolu

Geri Yükleme İlerlemeşini İzleme

Büyük SQL dosyaları için pv kullanarak ilerlemeyi izleyebilirsiniz:

pv /backups/my_production_db_backup.sql | psql -U postgres -d my_restored_db

7. Özel Format Dumplarından Geri Yükleme

Özel format dumpları psql yerine pg_restore yardımcı programını gerektirir.

Temel Geri Yükleme

pg_restore -U postgres -d my_restored_db /backups/my_production_db.dump

Veritabanını Otomatik Olarak Geri Yükle ve Oluştur

pg_restore öğesine veritabanını doldurmadan önce oluşturmasını söylemek için -C bayrağını kullanın:

pg_restore -U postgres -C -d postgres /backups/my_production_db.dump

Daha Hızlı Kurtarma için Paralel Geri Yükleme

pg_restore -U postgres -d my_restored_db -j 4 /backups/my_production_db_dir/

-j 4 öğesini bir dizin formatı yedeklemesiyle kullanmak, dört çekirdekli bir sunucuda geri yükleme süresini %75’e kadar azaltabilir — felaket kurtarma sırasında kapalı kalma süresini en aza indirirken önemli bir avantaj.

Yalnızca Belirli Bir Tabloyu Geri Yükle

pg_restore -U postgres -d my_restored_db -t orders /backups/my_production_db.dump

Bu ayrıntılı yetenek, özel formatın düz SQL dumplarına göre temel avantajlarından biridir.

8. Yöntem 4 — Sürekli Arşivleme ve Belirli Bir Zaman Noktasına Kurtarma (PITR)

PITR, görev açısından kritik PostgreSQL dağıtımları için altın standarttır. Bir temel yedek üzerine Write-Ahead Log (WAL) segmentlerini yeniden oynatarak veritabanınızı herhangi bir belirli zaman noktasına geri yükleyebilirsiniz — sadece son yedek değil. Bu, bilinen bir zaman damgasında meydana gelen mantıksal bir hatadan (örneğin, yanlışlıkla DROP TABLE) kurtulmanız gereken senaryolar için gereklidir.

Adım 1: postgresql.conf içinde WAL Arşivlemesini Etkinleştirin

PostgreSQL yapılandırma dosyasını bulun ve düzenleyin:

nano /etc/postgresql/15/main/postgresql.conf

Aşağıdaki yönergeleri ekleyin veya değiştirin:

# Enable WAL archiving
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'

Parametre açıklaması:

ParametreDeğerAçıklama
wal_levelreplicaArşivleme için yeterli WAL ayrıntısını etkinleştirir
archive_modeonArşivleme işlemini etkinleştirir
archive_command'cp %p /path/%f'WAL dosyalarını arşive kopyalamak için shell komutu

Arşiv dizinini oluşturun ve doğru izinleri ayarlayın:

mkdir -p /var/lib/postgresql/wal_archive
chown postgres:postgres /var/lib/postgresql/wal_archive
chmod 700 /var/lib/postgresql/wal_archive

Değişiklikleri uygulamak için PostgreSQL’i yeniden başlatın:

systemctl restart postgresql

Adım 2: pg_basebackup ile Temel Yedek Alın

pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs
ParametreAçıklama
-D /backups/base_backupTemel yedek için hedef dizin
-FtTar format çıktısı
-zGzip ile sıkıştır
-Pİlerlemeyi göster
-XsYedekleme sırasında WAL akışı

Adım 3: Belirli Bir Zaman Noktasına Geri Yükleyin

Temel yedek ve WAL arşivlerinden geri yüklemek için:

  1. PostgreSQL’i durdurun:
systemctl stop postgresql
  1. Mevcut veri dizinini temizleyin:
rm -rf /var/lib/postgresql/15/main/*
  1. Temel yedeklemeyi çıkarın:
tar -xzf /backups/base_backup/base.tar.gz -C /var/lib/postgresql/15/main/
  1. recovery.conf oluşturun (PostgreSQL 11 ve öncesi) veya postgresql.conf yapılandırın ve bir recovery.signal dosyası oluşturun (PostgreSQL 12+):
# For PostgreSQL 12+
touch /var/lib/postgresql/15/main/recovery.signal

postgresql.conf öğesine ekleyin:

restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
recovery_target_time = '2025-01-15 14:30:00'
recovery_target_action = 'promote'
  1. Doğru sahipliği ayarlayın ve PostgreSQL’i başlatın:
chown -R postgres:postgres /var/lib/postgresql/15/main/
systemctl start postgresql

PostgreSQL, WAL segmentlerini belirtilen zaman damgasına kadar yeniden oynatacak ve ardından normal okuma-yazma durumuna yükseltecektir.

9. Cron ile Yedeklemeleri Otomatikleştirme

Manuel yedeklemeler güvenilir değildir. Yedekleme zamanlamanızı cron ile otomatikleştirmek tutarlılığı sağlar ve insan hatası faktörünü ortadan kaldırır.

Bir Yedekleme Betiği Oluşturun

nano /usr/local/bin/pg_backup.sh
#!/bin/bash

# PostgreSQL Automated Backup Script
BACKUP_DIR="/backups/postgresql"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_USER="postgres"
DB_NAME="my_production_db"
RETENTION_DAYS=14

# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"

# Perform the backup
pg_dump -U "$DB_USER" -F c "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.dump"

# Remove backups older than retention period
find "$BACKUP_DIR" -name "*.dump" -mtime +"$RETENTION_DAYS" -delete

# Log completion
echo "[$TIMESTAMP] Backup of $DB_NAME completed successfully." >> /var/log/pg_backup.log

Betiği çalıştırılabilir yapın:

chmod +x /usr/local/bin/pg_backup.sh

Cron ile Zamanla

crontab -e

Her gece saat 2:00’de yedekleme çalıştırmak için aşağıdaki satırı ekleyin:

0 2 * * * /usr/local/bin/pg_backup.sh

Haftalık tam yedeklemeler artı günlük artımlı WAL arşivleme için bunu önceki bölümde açıklanan PITR kurulumu ile birleştirin.

10. Yedekleri Çevrimdışı Olarak Güvenli Hale Getirme ve Depolama

Üretim veritabanınızla aynı sunucuda depolanan bir yedek gerçek bir yedek değildir — bu tek bir hata noktasıdır. Aşağıdaki güvenlik ve çevrimdışı depolama uygulamalarını uygulayın:

Aktarımdan Önce Yedekleri Şifreleyin

gpg --symmetric --cipher-algo AES256 /backups/my_production_db.dump

Yedekleri rsync ile Uzak Bir Konuma Aktarın

rsync -avz --progress /backups/postgresql/ user@remote-backup-server:/remote/backups/postgresql/

SSH Pipe ile pg_dump Kullanın Doğrudan Uzak Yedekleme İçin

pg_dump -U postgres my_production_db | gzip | ssh user@remote-server "cat > /backups/my_production_db_$(date +%Y%m%d).sql.gz"

PostgreSQL için Güvenlik Duvarı Kuralları (UFW)

PostgreSQL bağlantı noktası erişimini yalnızca güvenilir IP’lerle sınırlayın:

ufw allow from 192.168.1.0/24 to any port 5432
ufw deny 5432
ufw enable

Farklı barındırma katmanlarında birden fazla projeyi yöneten ekipler için, AlexHost Paylaşılan Web Barındırma planları da daha küçük projeler için yedekleme iş akışlarınızı tamamlayabilecek veritabanı yönetim araçlarını destekler.

11. En İyi Uygulamalar Özeti

PostgreSQL yedeklemelerini doğru şekilde uygulamak disiplin ve katmanlı bir yaklaşım gerektirir. Verilerinizin her zaman korunduğundan emin olmak için bu en iyi uygulamaları izleyin:

UygulamaÖneri
Yedekleme sıklığıMinimum günlük; yüksek işlem hacimli veritabanları için saatlik
Yedekleme formatları1 GB’dan büyük veritabanları için özel format (-F c) kullanın
Saklama politikası14 günlük, 4 haftalık ve 3 aylık yedekleme tutun
DoğrulamaBütünlüğü doğrulamak için aylık olarak test ortamına geri yükleyin
ŞifrelemeYedeklemeleri uzak aktarımdan önce her zaman şifreleyin
Uzak depolamaYedeklemeleri en az bir coğrafi olarak ayrı konumda tutun
İzlemeYedekleme işi başarısızlıklarında e-posta veya izleme sistemi aracılığıyla uyarı verin
Üretim için PITRTüm görev açısından kritik veritabanlarında WAL arşivlemesini etkinleştirin
BelgelerGeri yükleme prosedürleri için yazılı bir runbook tutun

> Kritik hatırlatma: Hiç test edilmemiş bir yedekleme, yedekleme değildir — bu bir varsayımdır. Düzenli geri yükleme tatbikatları planlayın ve sonuçları belgeleyin.

Sonuç: PostgreSQL Verilerinizi AlexHost ile Güvenle Koruyun

PostgreSQL, açık kaynaklı veritabanı sistemleri arasında en kapsamlı yedekleme ve kurtarma araç setlerinden birini sunar. Hızlı SQL anlık görüntüleri için pg_dump basitliğinden, granüler zaman içinde nokta kurtarması için PITR’nin cerrahi hassasiyetine kadar, mermi geçirmez bir veri koruma stratejisi oluşturmak için ihtiyacınız olan her şeye sahipsiniz.

Anahtar, uygulamadır: yedeklemelerinizi otomatikleştirin, düzenli olarak doğrulayın, aktarımdan önce şifreleyin ve site dışında saklayın. AlexHost Dedicated Servers‘ın performansı ve güvenilirliği ile birleştirildiğinde — NVMe depolama, tam root erişimi ve kurumsal düzeyde DDoS koruması özellikli — PostgreSQL veritabanlarınız hem hızlı hem de dayanıklı olacaktır.

Çıplak metal yönetiminin yükü olmadan ölçeklenebilir altyapıya ihtiyaç duyan takımlar için, AlexHost VPS Hosting performans ve çalışma süresi konusunda aynı taahhüt ile esnek, uygun maliyetli bir alternatif sunar. Ve veritabanı destekli web uygulamalarınızı uçtan uca güvence altına almak gerekiyorsa, barındırmanızı AlexHost SSL Certificates ile eşleştirmek, uygulama katmanınız ile kullanıcılarınız arasında şifreli iletişim sağlar.

Bu yedekleme stratejilerini bugün uygulamaya başlayın. Gelecekte — saat 3’te üretim veritabanı bozulması ile karşı karşıya kalan — kendiniz buna teşekkür edeceksiniz.