Mantıksal ve Fiziksel Yedeklemeler
pg_dump ve temel yedeklemeler.
Mantıksal ve Fiziksel Yedeklemeler, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 1. 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.
Veritabanı Yedeği Nedir?
Yedek, veri kaybı, bozulma veya felaket sonrasında sistemi geri yüklemek için kullanılabilecek veritabanı verilerinizin bir kopyasıdır. Güvenilir yedekler olmadan tek bir donanım arızası veya yanlışlıkla gerçekleştirilen bir DELETE, aylarca ya da yıllarca biriken verileri kalıcı olarak yok edebilir.
PostgreSQL iki geniş yedekleme stratejisi kategorisi sunar: mantıksal yedekler ve fiziksel yedekler. Her birinin, her DBA'nın anlaması gereken farklı özellikleri, kullanım alanları ve ödünleri vardır.
Mantıksal Yedekleri Anlama
Bir mantıksal yedek, veritabanını insanların okuyabileceği SQL ifadeleriyle — CREATE TABLE, INSERT, COPY ve benzeri komutlarla — dışa aktarır. PostgreSQL'de bunun için en yaygın kullanılan araç pg_dump'tır.
Çıktı düz SQL olduğundan mantıksal yedek taşınabilirdir: yedeği farklı bir PostgreSQL sürümüne, farklı bir işletim sistemine aktarabilir veya tek tek tabloları ya da şemaları seçerek geri yükleyebilirsiniz. Ödünü ise büyük veritabanlarını dışa aktarma ve geri yükleme işlemlerinin yavaş olabilmesidir.
Mantıksal Yedekleme için pg_dump Kullanımı
pg_dump yardımcı programı SQL içinde değil, komut satırından çalıştırılır. Çalışan bir PostgreSQL sunucusuna bağlanır ve seçilen veritabanını dışa aktarır. Düz SQL, özel sıkıştırılmış biçim veya dizin biçiminde çıktı alabilirsiniz.
Aşağıdaki SQL, mantıksal bir yedeğin neleri yakaladığını — bir tablonun yapısını ve verilerini yeniden oluşturulabilir ifadeler olarak — benzetim yoluyla gösterir.
-- Simulating what pg_dump produces for a table
-- (These statements are written by pg_dump into the backup file)
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
customer TEXT NOT NULL,
amount NUMERIC(10,2),
created_at TIMESTAMPTZ DEFAULT now()
);
INSERT INTO orders (customer, amount, created_at) VALUES
('Alice', 149.99, '2024-01-15 09:30:00+00'),
('Bob', 89.50, '2024-01-16 14:00:00+00'),
('Carol', 210.00, '2024-01-17 11:15:00+00');pg_dump Çıktı Biçimleri
pg_dump, her biri farklı geri yükleme iş akışlarına uygun dört çıktı biçimini destekler:
- düz — herhangi bir metin düzenleyicide okunabilen düz bir SQL betiği.
- özel — sıkıştırılmış bir ikili biçim; en esnek seçenektir ve paralel geri yüklemeyi destekler.
- dizin — tablo başına bir dosya; paralel dışa aktarma ve geri yüklemeyi destekler.
- tar — dizin biçiminin tar arşivi.
Büyük veritabanları için özel biçim önerilir; çünkü pg_restore, -j N çalışanını kullanarak nesneleri paralel olarak geri yükleyebilir.
-- Checking which databases exist before choosing what to back up
SELECT datname,
pg_size_pretty(pg_database_size(datname)) AS size
FROM pg_database
WHERE datname NOT IN ('template0', 'template1')
ORDER BY pg_database_size(datname) DESC;Mantıksal Yedeği Geri Yükleme
Düz SQL mantıksal yedeği psql ile geri yüklenir. Özel biçimli bir yedek için pg_restore gerekir. Her iki araç da tabloları, dizinleri, kısıtlamaları ve verileri yeniden oluşturmak üzere SQL ifadelerini yeniden yürütür.
Mantıksal yedekler SQL içerdiğinden, geri yüklemeden önce bunları düzenleyebilirsiniz — örneğin yalnızca bir tabloyu geri yüklemek veya şema adını değiştirmek için. Bu esneklik, mantıksal yaklaşımın en büyük avantajlarından biridir.
-- After restoring a backup, verify row counts match expectations
SELECT
schemaname,
relname AS table_name,
n_live_tup AS estimated_rows
FROM pg_stat_user_tables
ORDER BY n_live_tup DESC;Fiziksel Yedekleri Anlama
Fiziksel yedek (temel yedek olarak da adlandırılır), PostgreSQL'in diskte kullandığı ham veri dosyalarını — sayfaları, WAL (Önden Yazma Günlüğü) bölümlerini ve yapılandırma dosyalarını — kopyalar. Sonuç, belirli bir andaki tüm kümenin ikili bir anlık görüntüsüdür.
Fiziksel yedeklerin büyük veritabanlarında geri yüklenmesi genellikle çok daha hızlıdır; çünkü SQL yeniden yürütülmez. PostgreSQL yalnızca dosyaları yeniden yerlerine okur ve tutarlı bir duruma ulaşmak için WAL'ı yeniden yürütür.
pg_basebackup: Fiziksel Yedek Alma
pg_basebackup, fiziksel yedekler için standart PostgreSQL aracıdır. Veri dizinini, çalışan bir birincil sunucudan çoğaltma bağlantısı üzerinden akış olarak alır. Çoğaltma ayrıcalığına sahip bir kullanıcıya ve wal_level değerinin replica veya daha yüksek bir değere ayarlanmasına ihtiyacınız vardır.
Temel yedeği almaya başlamadan önce, sunucunun doğru yapılandırıldığını doğrulamak için veritabanı içinden çoğaltma ayarlarını sorgulayabilirsiniz.
-- Verify WAL level and replication settings before a physical backup
SELECT name, setting, unit
FROM pg_settings
WHERE name IN (
'wal_level',
'max_wal_senders',
'archive_mode',
'archive_command'
)
ORDER BY name;WAL Arşivleme ve Zamanda Belirli Bir Noktaya Kurtarma
Temel yedek, belirli bir andaki durumu yakalar. Bu yedekten sonra gerçekleşen herhangi bir zamana kurtarma yapmak için PostgreSQL arşivlenmiş WAL bölümlerini yeniden yürütür — buna Point-in-Time Recovery (PITR) denir.
archive_mode = on olduğunda ve archive_command yapılandırıldığında PostgreSQL, tamamlanan WAL bölümlerini bir arşiv konumuna kopyalar. Kurtarma sırasında restore_command, sunucunun bunları istenen hedef zamana kadar yeniden yürütebilmesi için bu bölümleri geri getirir.
-- Inspect current WAL position and archive status
SELECT
pg_current_wal_lsn() AS current_lsn,
pg_walfile_name(pg_current_wal_lsn()) AS current_wal_file,
archived_count,
failed_count,
last_archived_wal,
last_archived_time
FROM pg_stat_archiver;Mantıksal ve Fiziksel Yedekleri Karşılaştırma
Mantıksal ve fiziksel yedekler arasındaki seçim gereksinimlerinize bağlıdır:
- Mantıksal (pg_dump): sürümler arasında taşınabilirdir, kısmi geri yüklemeyi destekler ve insanlar tarafından okunabilir; ancak büyük veritabanlarında yavaştır ve alt işlem düzeyinde ayrıntı sunmaz.
- Fiziksel (pg_basebackup + WAL): büyük kümelerde hızlı geri yükleme sağlar, PITR'yi destekler, sürüme özeldir (aynı ana sürüme geri yüklenmelidir) ve tüm kümeyi geri yükler — tek bir tabloyu geri yükleyemezsiniz.
Üretim ortamlarında genellikle her ikisi kullanılır: sürekli WAL arşivlemeyle birlikte her gece alınan fiziksel temel yedekler ve taşınabilirlik ile seçici geri yüklemeler için düzenli aralıklarla alınan mantıksal yedekler.
Yedek Bütünlüğünü Doğrulama
Hiç sınanmamış bir yedek, yedek değildir — yalnızca bir umuttur. Yedekleri her zaman bir sınama ortamına geri yükleyerek ve verileri doğrulayarak geçerli kılın.
Mantıksal yedekler için hızlı bir bütünlük denetimi, satırları sayıp sağlama toplamlarını karşılaştırmaktır. Fiziksel yedekler için PostgreSQL 14 ve sonraki sürümler, pg_basebackup tarafından yazılan bildirim dosyasını denetleyen pg_verifybackup aracını kullanıma sundu.
-- After a test restore, compare row counts across critical tables
SELECT
relname AS table_name,
n_live_tup AS live_rows,
pg_size_pretty(pg_total_relation_size(relid)) AS total_size
FROM pg_stat_user_tables
WHERE schemaname = 'public'
ORDER BY n_live_tup DESC
LIMIT 20;Yedekleri İzleme ve Zamanlama
Yedekleri otomatikleştirmek ve izlemek, onları almak kadar önemlidir. Yedeklerin en son ne zaman çalıştığını, ne kadar sürdüğünü ve başarılı olup olmadığını takip edin. PostgreSQL bu amaçla kullanabileceğiniz yararlı üst veriler sunar.
Fiziksel yedekler için pg_stat_archiver, son başarılı arşivleme işlemini ve tüm başarısızlıkları gösterir. Mantıksal yedekler için pg_dump komutunu, başlangıç zamanını, bitiş zamanını, dosya boyutunu ve çıkış kodunu bir izleme tablosuna veya uyarı sistemine kaydeden bir betiğin içine alın.
-- Create a simple backup log table to track logical backup runs
CREATE TABLE IF NOT EXISTS backup_log (
id SERIAL PRIMARY KEY,
backup_type TEXT NOT NULL CHECK (backup_type IN ('logical', 'physical')),
started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
finished_at TIMESTAMPTZ,
size_bytes BIGINT,
status TEXT NOT NULL DEFAULT 'running',
notes TEXT
);
-- Record the start of a logical backup job
INSERT INTO backup_log (backup_type, status)
VALUES ('logical', 'running')
RETURNING id, started_at;Mantıksal ve Fiziksel: Hızlı Sınama
PostgreSQL'deki mantıksal ve fiziksel yedekleme stratejileri konusundaki anlayışınızı sınayın.
Ders Özeti: Mantıksal ve Fiziksel Yedekler
Bu derste iki temel PostgreSQL yedekleme stratejisini incelediniz:
- Mantıksal yedekler, veritabanlarını SQL ifadeleri olarak dışa aktarmak için
pg_dumpkullanır. Taşınabilir ve insanlar tarafından okunabilirdir; kısmi geri yüklemeleri destekler, ancak çok büyük veritabanlarında yavaş olabilir. - Fiziksel yedekler, ham veri dosyalarını kopyalamak için
pg_basebackupkullanır. WAL arşivlemeyle birlikte hızlı geri yüklemeleri ve Zamanda Belirli Bir Noktaya Kurtarmayı sağlar; ancak sürüme özeldir ve her zaman kümenin tamamını geri yükler. - Üretim sistemleri genellikle her iki stratejiyi birleştirir: hızlı ve ayrıntılı kurtarma için WAL arşivlemeli fiziksel temel yedekler, taşınabilirlik için de düzenli aralıklarla alınan mantıksal yedekler.
- Geri yüklemelerinizi her zaman sınayın. Sınanmamış bir yedeğe gerçek bir felaket durumunda güvenilemez.
Bu iki yaklaşımı anlamak, herhangi bir PostgreSQL kurulumu için sağlam bir felaket kurtarma planı tasarlamanın temel koşuludur.
Sıkça Sorulan Sorular
“Mantıksal ve Fiziksel Yedeklemeler” dersi ücretsiz mi?
Evet — “Mantıksal ve Fiziksel Yedeklemeler” 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.
“Mantıksal ve Fiziksel Yedeklemeler” dersinde ne öğreneceğim?
pg_dump ve temel yedeklemeler. 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 1. dersidir.
“Mantıksal ve Fiziksel Yedeklemeler” 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ı