PostgreSQL Veritabanlarının Yedeklenmesi ve Kurtarılması: AlexHost Kullanıcıları için Kapsamlı 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 silinen veriler, 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 otomatikleştirilmiş 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 konfigürasyon kontrolü için tam root erişimi ve yerleşik DDoS koruması ile AlexHost, 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 veritabanı tarafından desteklenen bir WordPress kurulumu veya özel bir kurumsal sistem çalıştırıyor olsanız da, bu kılavuz basit SQL dökümlerinden gelişmiş Point-in-Time Recovery (PITR) kadar her büyük PostgreSQL yedekleme ve kurtarma yönteminde size yol gösterir — tümü üretim ortamları için optimize edilmiştir.
İçindekiler
- PostgreSQL Yedekleme Seçeneklerini Anlama
- Ön Koşullar ve Ayrıcalık Gereksinimleri
- Yöntem 1 — SQL Dump ile
pg_dump - Yöntem 2 — Tüm Veritabanlarını
pg_dumpallile Yedekleme - Yöntem 3 — Büyük Veritabanları için Özel Format Yedeklemeleri
- SQL Dökümlerinden Geri Yükleme
- Özel Format Dökümlerinden Geri Yükleme
- Yöntem 4 — Sürekli Arşivleme ve Point-in-Time Recovery (PITR)
- Yedeklemeleri Cron ile Otomatikleştirme
- Yedeklemeleri Güvenli Hale Getirme ve Uzaktan Depolama
- En İyi Uygulamalar Özeti
1. PostgreSQL Yedekleme Seçeneklerini Anlama
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öntem | En İyi Kullanım | Avantajlar | Dezavantajlar |
|---|---|---|---|
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 Dump | Orta ve büyük ölçekli 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 veya anlık görüntü farkında olmalıdır |
| PITR (WAL Arşivleme) | Görev açısından kritik üretim sistemleri | Ayrıntılı point-in-time kurtarma | Karmaşık kurulum ve bakım |
Başlamadan önce bu dengeleri anlamak gereklidir. Çoğu üretim ortamı, örneğin, ayrıntılı kurtarma yeteneği için sürekli WAL arşivlemesi ile birlikte gece özel format dökümlerinden en az iki yaklaşımı birleştirmekten yararlanır.
2. Ön Koşullar ve Ayrıcalık Gereksinimleri
Herhangi bir yedekleme işlemini yürütmeden ö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_dumpalliçin superuser ayrıcalıkları zorunludur.
PostgreSQL sürümünüzü doğrulayın:
psql --versionYedeklemeden ö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 yükü için hesaba katmak üzere yedeklenen veritabanının boyutunun en az 1,5 katı.
SSH aracılığıyla sunucunuza bağlanın:
ssh root@your-server-ipVPS Hosting planı kullanıyorsanız, tam SSH erişimine ve kısıtlama olmadan PostgreSQL’i 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ı etkin olarak kullanılıyor olsa bile, tek bir veritabanının tutarlı bir anlık görüntüsünü üretir. Çıktı, herhangi bir uyumlu PostgreSQL kurulumunda incelenebilen, düzenlenebilen ve yeniden oynatılabilen düz metin bir SQL komut dosyasıdır.
Adım 1: Terminal Açın ve Sunucunuza Erişin
ssh root@your-alexhost-server-ipAdım 2: pg_dump Komutunu Çalıştırın
pg_dump -U username -W -F p database_name > /backups/backup_file.sqlParametre dökümü:
| Parametre | Açıklama |
|---|---|
-U username | Yedeklemeyi gerçekleştiren PostgreSQL kullanıcısı |
-W | Parolayı etkileşimli olarak sor |
-F p | Çıktı formatı: p = düz SQL metni |
database_name | Yedeklenecek 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_*.sqlDosya, PostgreSQL başlık yorumları ve SET ifadeleri ile başlamalı, geçerli bir dökümün oluşturulduğunu doğrulayarak.
4. Yöntem 2 — Tüm Veritabanlarını pg_dumpall ile Yedekleme
Bir PostgreSQL örneğindeki her veritabanını — roller ve tablespace’ler gibi genel nesneleri de dahil — yedeklemeniz gerektiğinde, pg_dumpall doğru araçtır.
pg_dumpall -U postgres -W > /backups/all_databases_$(date +%Y%m%d).sqlBu 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ı meşgul 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.gz5. Yöntem 3 — Büyük Veritabanları için Özel Format Yedeklemeleri
Birkaç gigabaytı aşan üretim veritabanları için, özel format (-F c) düz SQL dökümlerine göre kuvvetle tavsiye edilir. Özel format yedeklemeleri:
- Varsayılan olarak sıkıştırılmıştır — depolama gereksinimlerini önemli ölçüde azaltır
- Geri yükleme için daha hızlıdır —
-jbayrağı 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).dumpSı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| Parametre | Açıklama |
|---|---|
-F d | Dizin formatı — tablo başına bir dosya |
-j 4 | 4 paralel çalışan işlemi kullan |
-f /path/to/dir | Çıktı dizini (henüz mevcut olmamalıdır) |
Bu yaklaşım, çok çekirdekli sunucularda yedekleme süresini önemli ölçüde azaltır ve AlexHost’ta bulunan yüksek performanslı dedicated server ortamları için idealdir.
6. SQL Dökümlerinden Geri Yükleme
Düz SQL Dökümünden Tek Bir Veritabanını Geri Yükleme
İlk olarak, hedef veritabanının mevcut 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.sqlParametre dökümü:
| Parametre | Açıklama |
|---|---|
-U postgres | PostgreSQL superuser |
-d my_restored_db | Geri yükleme için hedef veritabanı |
-f /path/to/file.sql | SQL döküm dosyasının yolu |
Geri Yükleme İlerlemeşini İzleyin
Büyük SQL dosyaları için, pv kullanarak ilerlemeyi izleyebilirsiniz:
pv /backups/my_production_db_backup.sql | psql -U postgres -d my_restored_db7. Özel Format Dökümlerinden Geri Yükleme
Özel format dökümler, pg_restore yerine psql yardımcı programını gerektirir.
Temel Geri Yükleme
pg_restore -U postgres -d my_restored_db /backups/my_production_db.dumpGeri Yükleme ve Veritabanını Otomatik Olarak Oluşturma
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.dumpDaha Hızlı Kurtarma için Paralel Geri Yükleme
pg_restore -U postgres -d my_restored_db -j 4 /backups/my_production_db_dir/Dizin formatı yedeklemesi ile -j 4 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ükleme
pg_restore -U postgres -d my_restored_db -t orders /backups/my_production_db.dumpBu ayrıntılı yetenek, özel formatın düz SQL dökümlerine göre temel avantajlarından biridir.
8. Yöntem 4 — Sürekli Arşivleme ve Point-in-Time Recovery (PITR)
PITR, görev açısından kritik PostgreSQL dağıtımları için altın standarttır. Bir temel yedeklemenin üzerine Write-Ahead Log (WAL) segmentlerini yeniden oynatarak, veritabanınızı herhangi bir belirli zaman noktasına geri yüklemenize izin verir — yalnızca son yedekleme değil. Bu, bilinen bir zaman damgasında meydana gelen mantıksal bir hata (örneğin, yanlışlıkla DROP TABLE) nedeniyle kurtarma yapmanı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.confAş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ı:
| Parametre | Değer | Açıklama |
|---|---|---|
wal_level | replica | Arşivleme için yeterli WAL ayrıntısını etkinleştirir |
archive_mode | on | Arş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_archiveDeğişiklikleri uygulamak için PostgreSQL’i yeniden başlatın:
systemctl restart postgresqlAdım 2: pg_basebackup ile Temel Yedekleme Alın
pg_basebackup -U postgres -D /backups/base_backup -Ft -z -P -Xs| Parametre | Açıklama |
|---|---|
-D /backups/base_backup | Temel yedekleme için hedef dizin |
-Ft | Tar formatı çıktısı |
-z | Gzip ile sıkıştır |
-P | İlerlemeyi göster |
-Xs | Yedekleme sırasında WAL akışı |
Adım 3: Belirli Bir Zaman Noktasına Geri Yükleme
Temel yedekleme ve WAL arşivlerinden
