Cadangan Logis vs Fisik
pg_dump dan cadangan dasar.
Cadangan Logis vs Fisik adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Cadangan Basis Data?
Cadangan adalah salinan data basis data Anda yang dapat digunakan untuk memulihkan sistem setelah kehilangan data, kerusakan, atau bencana. Tanpa cadangan yang andal, satu kegagalan perangkat keras atau DELETE yang tidak disengaja dapat menghancurkan data berbulan-bulan atau bertahun-tahun secara permanen.
PostgreSQL menyediakan dua kategori besar strategi pencadangan: cadangan logis dan cadangan fisik. Masing-masing memiliki karakteristik, kasus penggunaan, dan kompromi berbeda yang harus dipahami setiap DBA.
Penjelasan Cadangan Logis
Cadangan logis mengekspor basis data sebagai pernyataan SQL yang dapat dibaca manusia — CREATE TABLE, INSERT, COPY, dan perintah serupa. Alat yang paling umum untuk ini di PostgreSQL adalah pg_dump.
Karena keluarannya berupa SQL biasa, cadangan logis bersifat portabel: Anda dapat memulihkannya ke versi PostgreSQL yang berbeda, sistem operasi yang berbeda, atau bahkan memulihkan tabel atau skema individual secara selektif. Komprominya, pencadangan dan pemulihan basis data besar dapat berlangsung lambat.
Menggunakan pg_dump untuk Cadangan Logis
Utilitas pg_dump dijalankan dari baris perintah, bukan di dalam SQL. Utilitas ini terhubung ke server PostgreSQL yang sedang berjalan dan mengekspor basis data yang dipilih. Anda dapat menghasilkan SQL biasa, format terkompresi khusus, atau format direktori.
SQL di bawah ini mensimulasikan hal-hal yang ditangkap cadangan logis — struktur dan data sebuah tabel sebagai pernyataan yang dapat direproduksi.
-- 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');Format Keluaran pg_dump
pg_dump mendukung empat format keluaran, masing-masing sesuai untuk alur kerja pemulihan yang berbeda:
- biasa — skrip SQL biasa yang dapat dibaca di editor teks apa pun.
- khusus — format biner terkompresi; yang paling fleksibel dan mendukung pemulihan paralel.
- direktori — satu berkas per tabel, mendukung pencadangan dan pemulihan paralel.
- tar — arsip tar dari format direktori.
Format khusus direkomendasikan untuk basis data besar karena pg_restore dapat memulihkan objek secara paralel menggunakan -j N pekerja.
-- 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;Memulihkan Cadangan Logis
Cadangan logis berformat SQL biasa dipulihkan dengan psql. Cadangan berformat khusus memerlukan pg_restore. Kedua alat tersebut memutar ulang pernyataan SQL untuk membuat kembali tabel, indeks, batasan, dan data.
Karena cadangan logis berisi SQL, Anda dapat mengeditnya sebelum memulihkan — misalnya, untuk memulihkan hanya satu tabel atau mengubah nama skema. Fleksibilitas ini adalah salah satu keunggulan terbesar pendekatan logis.
-- 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;Penjelasan Cadangan Fisik
Cadangan fisik (juga disebut cadangan dasar) menyalin berkas data mentah yang digunakan PostgreSQL di disk — halaman, segmen WAL (Log Tulis-Dahulu), dan berkas konfigurasi. Hasilnya adalah cuplikan biner seluruh klaster pada suatu titik waktu.
Cadangan fisik biasanya jauh lebih cepat dipulihkan untuk basis data besar karena tidak ada eksekusi ulang SQL; PostgreSQL cukup membaca kembali berkas ke tempatnya dan memutar ulang WAL untuk mencapai keadaan konsisten.
pg_basebackup: Membuat Cadangan Fisik
pg_basebackup adalah alat PostgreSQL standar untuk cadangan fisik. Alat ini mengalirkan direktori data dari server utama yang sedang berjalan melalui koneksi replikasi. Anda memerlukan pengguna dengan hak istimewa replikasi dan wal_level yang diatur ke replica atau lebih tinggi.
Di dalam basis data, Anda dapat menjalankan kueri pengaturan replikasi untuk memastikan server dikonfigurasi dengan benar sebelum mencoba membuat cadangan dasar.
-- 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;Pengarsipan WAL dan Pemulihan Titik Waktu
Cadangan dasar menangkap suatu titik waktu. Untuk memulihkan ke titik sembarang setelah cadangan tersebut, PostgreSQL memutar ulang segmen WAL yang diarsipkan — ini disebut Pemulihan Titik Waktu (PITR).
Saat archive_mode = on dan archive_command dikonfigurasi, PostgreSQL menyalin segmen WAL yang selesai ke lokasi arsip. Selama pemulihan, restore_command mengambil kembali segmen tersebut agar server dapat memutarnya ulang hingga waktu target yang diinginkan.
-- 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;Membandingkan Cadangan Logis dan Fisik
Memilih antara cadangan logis dan fisik bergantung pada kebutuhan Anda:
- Logis (pg_dump): portabel lintas versi, mendukung pemulihan sebagian, dapat dibaca manusia, tetapi lambat untuk basis data besar dan tidak memiliki tingkat perincian subtransaksi.
- Fisik (pg_basebackup + WAL): pemulihan cepat untuk klaster besar, mendukung PITR, khusus untuk versi tertentu (harus dipulihkan ke versi mayor yang sama), dan memulihkan seluruh klaster — Anda tidak dapat memulihkan satu tabel.
Lingkungan produksi biasanya menggunakan keduanya: cadangan dasar fisik setiap malam dengan pengarsipan WAL berkelanjutan, ditambah pencadangan logis berkala untuk portabilitas dan pemulihan yang sangat selektif.
Memverifikasi Integritas Cadangan
Cadangan yang belum pernah diuji bukanlah cadangan—melainkan harapan. Selalu validasi cadangan dengan memulihkannya ke lingkungan pengujian dan memverifikasi data.
Untuk cadangan logis, pemeriksaan integritas cepat dapat dilakukan dengan menghitung baris dan membandingkan suma periksa. Untuk cadangan fisik, PostgreSQL 14+ memperkenalkan pg_verifybackup, yang memeriksa berkas manifes yang ditulis oleh pg_basebackup.
-- 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;Pemantauan dan Penjadwalan Cadangan
Mengotomatiskan dan memantau cadangan sama pentingnya dengan membuatnya. Lacak kapan cadangan terakhir dijalankan, berapa lama prosesnya, dan apakah berhasil. PostgreSQL menyediakan metadata yang berguna untuk tujuan ini.
Untuk cadangan fisik, pg_stat_archiver menunjukkan pengarsipan terakhir yang berhasil dan setiap kegagalan. Untuk cadangan logis, bungkus pg_dump dalam skrip yang mencatat waktu mulai, waktu selesai, ukuran berkas, dan kode keluar ke tabel pemantauan atau sistem peringatan.
-- 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;Logis dan Fisik: Uji Cepat
Uji pemahaman Anda tentang strategi cadangan logis dan fisik di PostgreSQL.
Ringkasan Pelajaran: Cadangan Logis dan Fisik
Dalam pelajaran ini Anda mempelajari dua strategi dasar pencadangan PostgreSQL:
- Cadangan logis menggunakan
pg_dumpuntuk mengekspor basis data sebagai pernyataan SQL. Cadangan ini portabel, dapat dibaca manusia, dan mendukung pemulihan sebagian, tetapi dapat lambat untuk basis data yang sangat besar. - Cadangan fisik menggunakan
pg_basebackupuntuk menyalin berkas data mentah. Jika digabungkan dengan pengarsipan WAL, cadangan ini memungkinkan pemulihan cepat dan Pemulihan Titik Waktu, meskipun khusus untuk versi tertentu dan selalu memulihkan seluruh klaster. - Sistem produksi biasanya menggabungkan kedua strategi: cadangan dasar fisik dengan pengarsipan WAL untuk pemulihan yang cepat dan terperinci, ditambah cadangan logis berkala untuk portabilitas.
- Selalu uji pemulihan Anda. Cadangan yang belum diuji tidak dapat dipercaya dalam situasi bencana nyata.
Memahami kedua pendekatan ini penting untuk merancang rencana pemulihan bencana yang tangguh untuk setiap penerapan PostgreSQL.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Cadangan Logis vs Fisik” gratis?
Ya — teks lengkap “Cadangan Logis vs Fisik” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Cadangan Logis vs Fisik”?
pg_dump dan cadangan dasar. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Cadangan Logis vs Fisik” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Cadangan Logis vs Fisik
- Pemulihan Titik Waktu
- Menguji Pemulihan Anda
- Perencanaan Pemulihan Bencana