0Pricing
SQL Academy · Pelajaran

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_dump untuk 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_basebackup untuk 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

  1. Cadangan Logis vs Fisik
  2. Pemulihan Titik Waktu
  3. Menguji Pemulihan Anda
  4. Perencanaan Pemulihan Bencana
← Kembali ke SQL Academy