Belirli Bir Zamana Kurtarma
WAL ile herhangi bir ana geri yükleyin.
Belirli Bir Zamana Kurtarma, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Zamanda Belirli Bir Noktaya Kurtarma Nedir?
Point-in-Time Recovery (PITR), veritabanını yalnızca son yedek anlık görüntüsünün alındığı zamana değil, geçmişteki belirli herhangi bir ana geri yüklemenizi sağlar.
Bu, PostgreSQL'in her değişikliği sürekli olarak Önden Yazma Günlüğü (WAL) adı verilen bir akışa yazması sayesinde mümkündür. WAL kayıtlarını bir temel yedeğin üzerine yeniden uygulayarak tam olarak ihtiyaç duyduğunuz noktaya ulaşabilirsiniz.
Önden Yazma Günlüğü (WAL)
Her INSERT, UPDATE, DELETE ve DDL ifadesi, gerçek veri dosyalarına uygulanmadan önce WAL'a yazılır. Bu, sunucu yazma işleminin ortasında çökse bile kalıcılığı garanti eder.
PITR için arşivlenmiş WAL bölümleri zaman makinesinin kasetleri gibidir. Temel yedek başlangıç noktasıdır; WAL ise bundan sonra gerçekleşen her şeyi tamamlar.
-- Check current WAL write location
SELECT pg_current_wal_lsn() AS current_lsn,
pg_walfile_name(pg_current_wal_lsn()) AS current_wal_file;WAL Arşivlemeyi Etkinleştirme
PITR mümkün olmadan önce WAL arşivleme postgresql.conf dosyasında etkinleştirilmelidir. Temel parametreler wal_level, archive_mode ve archive_command'dır.
Arşiv komutu, tamamlanan her WAL bölümünü yerel bir dizin, NFS bağlama noktası veya bulut depolama kovası gibi güvenli bir konuma kopyalar.
-- View current WAL and archive settings
SELECT name, setting, unit
FROM pg_settings
WHERE name IN (
'wal_level',
'archive_mode',
'archive_command',
'archive_status'
)
ORDER BY name;Temel Yedek Alma
Temel yedek, sunucu çalışırken alınan tüm veri dizininin tutarlı bir kopyasıdır. PostgreSQL, bu süreci koordine etmek için pg_basebackup yardımcı programını ve düşük düzeyli SQL işlevlerini sunar.
Yedek, yedekleme başlangıç zamanından itibaren kaydedilen arşivlenmiş WAL bölümleriyle birlikte PITR için gereken her şeyi içerir.
-- Check the latest base backup information
SELECT backup_start,
backup_end,
pg_size_pretty(backup_total) AS total_size
FROM pg_stat_basebackup;Kurtarma Hedefi Zamanını Belirleme
Bir felaket gerçekleştiğinde ilk adım, geri yüklemek istediğiniz kesin zaman damgasını belirlemektir. Yaygın bir yaklaşım, yanlışlıkla gerçekleştirilen toplu DELETE gibi zararlı olaydan hemen önceki zaman damgasını bulmaktır.
İşlem günlüğü tabloları veya uygulama günlükleri genellikle bu zaman damgasını içerir. track_commit_timestamp açık olduğunda WAL, kesinleştirme zaman damgalarını kaydeder.
-- Find the commit timestamp of recent transactions (requires track_commit_timestamp=on)
SELECT xid,
pg_xact_commit_timestamp(xid::xid) AS committed_at
FROM pg_stat_activity
WHERE state = 'idle'
LIMIT 10;recovery.conf / Kurtarma Parametreleri
Kurtarma davranışı, postgresql.conf (PostgreSQL 12 ve sonrası) dosyasına veya eski recovery.conf dosyasına yerleştirilen parametrelerle denetlenir. En önemli parametreler şunlardır:
restore_command— arşivlenmiş WAL bölümlerinin nasıl alınacağırecovery_target_time— durulacak kesin zaman damgasırecovery_target_action— hedefe ulaşıldığında ne yapılacağı (promote,pause,shutdown)
-- Inspect recovery settings that are currently active
SELECT name, setting
FROM pg_settings
WHERE name IN (
'restore_command',
'recovery_target_time',
'recovery_target_action',
'recovery_target_inclusive'
)
ORDER BY name;Diğer Kurtarma Hedefi Türleri
Zaman, bir kurtarma hedefini belirlemenin tek yolu değildir. PostgreSQL dört hedef türünü destekler:
recovery_target_time— bir zaman damgası dizesirecovery_target_xid— belirli bir işlem ID'sirecovery_target_lsn— bir WAL günlük sıra numarasırecovery_target_name—pg_create_restore_point()kullanılarak oluşturulan adlandırılmış bir geri yükleme noktası
-- Create a named restore point before a risky migration
SELECT pg_create_restore_point('before_migration_2024_07_01') AS restore_lsn;Felaket Senaryosunu Canlandırma
PITR'yi bir sınama ortamında uygulamak için mevcut zamanı not ettikten sonra verileri kasıtlı olarak bozun veya silin. Böylece kurtarmanın doğru ana ulaştığını ve silinen satırların geri geldiğini doğrulayabilirsiniz.
-- Record the 'safe' timestamp, then simulate an accident
SELECT now() AS safe_point;
-- (In a test DB only!) accidentally delete important rows
DELETE FROM orders WHERE created_at < '2024-01-01';
-- Confirm the damage
SELECT COUNT(*) AS remaining_orders FROM orders;Kurtarmayı Gerçekleştirme
Kurtarma üç adımdan oluşur:
- Çalışan PostgreSQL örneğini durdurun.
- Temel yedeği veri dizinine geri yükleyin.
- Kurtarma parametrelerini yapılandırın ve PostgreSQL'i kurtarma kipinde başlatın — hedef zamana ulaşana kadar WAL'ı yeniden oynatır, ardından normal bir okuma-yazma sunucusuna yükseltir.
Sunucu günlükleri, her WAL dosyasının uygulandığını göstererek ilerlemeyi izlemeyi kolaylaştırır.
-- After recovery completes, confirm the cluster is no longer in recovery
SELECT pg_is_in_recovery() AS in_recovery,
pg_last_xact_replay_timestamp() AS last_replayed_txn;Kurtarmayı Doğrulama
Sunucu yükseltildikten sonra verilerin beklenen durumda olduğunu doğrulayın. Satır sayılarını, en yeni satırların zaman damgalarını ve iş açısından kritik değerleri denetleyin.
Uygulama trafiğini yeniden açmadan önce bu doğrulama sorgularını çalıştırmak akıllıca olur; böylece gerektiğinde kurtarmayı ileri taşıyabilir veya hedef zamanı ayarlayabilirsiniz.
-- Verify row counts and the latest transaction timestamp after recovery
SELECT 'orders' AS tbl, COUNT(*) AS rows FROM orders
UNION ALL
SELECT 'order_items' AS tbl, COUNT(*) AS rows FROM order_items
UNION ALL
SELECT 'customers' AS tbl, COUNT(*) AS rows FROM customers
ORDER BY tbl;PITR İçin En İyi Uygulamalar
Güvenilir bir PITR kurulumu, arşivlemeyi açmaktan fazlasını gerektirir. Temel uygulamalar şunlardır:
- Geri yüklemeleri düzenli olarak sınayın — sınanmamış yedek yedek sayılmaz.
- WAL arşiv gecikmesini izleyin — arşivlenmiş WAL'daki boşluklar tam kurtarmayı olanaksız kılar.
- Yeterli WAL geçmişini saklayın — bölümleri geçerli en eski temel yedeğiniz kadar geriye dönük tutun.
- Ayrı bir depolama konumu kullanın — birincil disk arızalanırsa aynı diskteki arşivlenmiş WAL da kaybolur.
-- Check for any WAL archiving failures
SELECT archived_count,
failed_count,
last_archived_wal,
last_archived_time,
last_failed_wal,
last_failed_time
FROM pg_stat_archiver;Kısa Sınama
Belirli Bir Zamana Kurtarma konusundaki anlayışınızı sınayın.
Özet: Belirli Bir Zamana Kurtarma
Bu derste PostgreSQL'in Önden Yazma Günlüğü'nün geçmişteki herhangi bir ana kurtarmayı nasıl mümkün kıldığını öğrendiniz:
- WAL arşivleme, temel yedekten sonraki her değişikliği kaydeder.
- Kurtarma hedefleri bir zaman damgası, işlem ID'si, LSN veya adlandırılmış bir geri yükleme noktası olabilir.
- Kurtarma süreci temel yedeği geri yükler, arşivlenmiş WAL'ı yeniden oynatır ve hedefe ulaşıldığında sunucuyu yükseltir.
- Doğrulama, trafiğe yeniden açılmadan önce veri bütünlüğünü onaylar.
- En iyi uygulamalar arasında düzenli geri yükleme sınamaları, arşiv izleme ve WAL'ı farklı bir konumda depolama bulunur.
PITR, insan hatalarına ve veri bozulmasına karşı güvenlik ağınızdır — buna hâkim olduğunuzda felaket kurtarmaya da hâkim olursunuz.
Sıkça Sorulan Sorular
“Belirli Bir Zamana Kurtarma” dersi ücretsiz mi?
Evet — “Belirli Bir Zamana Kurtarma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Belirli Bir Zamana Kurtarma” dersinde ne öğreneceğim?
WAL ile herhangi bir ana geri yükleyin. SQL Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Belirli Bir Zamana Kurtarma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Mantıksal ve Fiziksel Yedeklemeler
- Belirli Bir Zamana Kurtarma
- Geri Yüklemelerinizi Test Etme
- Felaket Kurtarma Planlaması