SQL Academy · Pelajaran

Pemulihan Titik Waktu

Pulihkan ke waktu apa pun dengan WAL.

Pelajaran 2 dari 413 langkah

Pemulihan Titik Waktu adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Pemulihan Titik Waktu?

Pemulihan Titik Waktu (PITR) memungkinkan Anda memulihkan basis data ke momen tertentu apa pun di masa lalu, bukan hanya ke waktu cuplikan cadangan terakhir.

Hal ini dimungkinkan karena PostgreSQL terus-menerus menulis setiap perubahan ke aliran yang disebut Log Tulis-Dahulu (WAL). Dengan memutar ulang rekaman WAL di atas cadangan dasar, Anda dapat tiba tepat di titik yang diperlukan.

Log Tulis-Dahulu (WAL)

Setiap pernyataan INSERT, UPDATE, DELETE, dan DDL pertama-tama ditulis ke WAL sebelum menyentuh berkas data sebenarnya. Hal ini menjamin ketahanan data meskipun server mengalami kerusakan di tengah penulisan.

Untuk PITR, segmen WAL yang diarsipkan berfungsi sebagai pita mesin waktu. Cadangan dasar adalah titik awal; WAL melengkapi semua yang terjadi setelahnya.

-- Check current WAL write location
SELECT pg_current_wal_lsn() AS current_lsn,
       pg_walfile_name(pg_current_wal_lsn()) AS current_wal_file;

Mengaktifkan Pengarsipan WAL

Sebelum PITR dapat dilakukan, pengarsipan WAL harus diaktifkan dalam postgresql.conf. Parameter utamanya adalah wal_level, archive_mode, dan archive_command.

Perintah pengarsipan menyalin setiap segmen WAL yang selesai ke lokasi aman seperti direktori lokal, titik pemasangan NFS, atau kontainer penyimpanan awan.

-- 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;

Membuat Cadangan Dasar

Cadangan dasar adalah salinan konsisten dari seluruh direktori data yang dibuat saat server sedang berjalan. PostgreSQL menyediakan utilitas pg_basebackup dan fungsi SQL tingkat rendah untuk mengoordinasikan proses ini.

Cadangan tersebut, jika digabungkan dengan segmen WAL yang diarsipkan sejak waktu mulai pencadangan, sudah mencakup semua yang Anda perlukan untuk PITR.

-- Check the latest base backup information
SELECT backup_start,
       backup_end,
       pg_size_pretty(backup_total) AS total_size
FROM   pg_stat_basebackup;

Menandai Waktu Target Pemulihan

Saat bencana terjadi, langkah pertama adalah mengidentifikasi stempel waktu persis yang ingin Anda gunakan untuk memulihkan. Pendekatan umum adalah menemukan stempel waktu tepat sebelum peristiwa yang merusak, seperti DELETE massal yang tidak disengaja.

Tabel log transaksi atau log aplikasi sering menyimpan stempel waktu ini. WAL sendiri mencatat stempel waktu pengesahan transaksi saat track_commit_timestamp aktif.

-- 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;

Parameter recovery.conf / Pemulihan

Perilaku pemulihan dikendalikan oleh parameter yang ditempatkan di postgresql.conf (PostgreSQL 12+) atau berkas recovery.conf yang lebih lama. Yang paling penting adalah:

  • restore_command — cara mengambil segmen WAL yang diarsipkan
  • recovery_target_time — stempel waktu persis untuk berhenti
  • recovery_target_action — tindakan yang dilakukan saat target tercapai (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;

Jenis Sasaran Pemulihan Lainnya

Waktu bukan satu-satunya cara untuk menentukan sasaran pemulihan. PostgreSQL mendukung empat jenis sasaran:

  • recovery_target_time — teks stempel waktu
  • recovery_target_xid — ID transaksi tertentu
  • recovery_target_lsn — nomor urutan log WAL
  • recovery_target_name — titik pemulihan bernama yang dibuat dengan pg_create_restore_point()
-- Create a named restore point before a risky migration
SELECT pg_create_restore_point('before_migration_2024_07_01') AS restore_lsn;

Mensimulasikan Bencana

Untuk berlatih menggunakan PITR di lingkungan pengujian, sengaja rusak atau hapus data setelah mencatat waktu saat ini. Dengan demikian, Anda dapat memverifikasi bahwa pemulihan mencapai waktu yang tepat dan baris yang dihapus muncul kembali.

-- 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;

Melakukan Pemulihan

Pemulihan melibatkan tiga langkah:

  1. Hentikan instans PostgreSQL yang sedang berjalan.
  2. Pulihkan cadangan dasar ke direktori data.
  3. Konfigurasikan parameter pemulihan dan mulai PostgreSQL dalam mode pemulihan — PostgreSQL akan memutar ulang WAL hingga mencapai waktu sasaran, lalu beralih menjadi server baca-tulis normal.

Catatan server menampilkan setiap berkas WAL yang diterapkan, sehingga kemajuan pemulihan mudah dilacak.

-- 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;

Memverifikasi Pemulihan

Setelah server beralih, verifikasi bahwa data berada dalam keadaan yang diharapkan. Periksa jumlah baris, stempel waktu baris terbaru, dan nilai apa pun yang penting bagi bisnis.

Sebaiknya jalankan kueri verifikasi ini sebelum mengizinkan lalu lintas aplikasi masuk kembali, sehingga Anda dapat melanjutkan pemulihan atau menyesuaikan waktu sasaran jika diperlukan.

-- 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;

Praktik Terbaik PITR

Penyiapan PITR yang andal memerlukan lebih dari sekadar mengaktifkan pengarsipan. Praktik utamanya meliputi:

  • Uji pemulihan secara berkala — cadangan yang belum diuji bukanlah cadangan.
  • Pantau keterlambatan pengarsipan WAL — kesenjangan dalam WAL yang diarsipkan membuat pemulihan menyeluruh tidak mungkin dilakukan.
  • Simpan riwayat WAL yang memadai — simpan segmen setidaknya sejauh cadangan dasar valid Anda yang paling lama.
  • Gunakan lokasi penyimpanan terpisah — jika disk utama gagal, WAL yang diarsipkan pada disk yang sama juga akan hilang.
-- 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;

Pemeriksaan Singkat

Uji pemahaman Anda tentang Pemulihan Titik Waktu.

Ringkasan: Pemulihan Titik Waktu

Dalam pelajaran ini, Anda mempelajari cara Log Tulis-Dahulu PostgreSQL memungkinkan pemulihan ke waktu mana pun di masa lalu:

  • Pengarsipan WAL menangkap setiap perubahan setelah pencadangan dasar.
  • Sasaran pemulihan dapat berupa stempel waktu, ID transaksi, LSN, atau titik pemulihan bernama.
  • Proses pemulihan memulihkan cadangan dasar, memutar ulang WAL yang diarsipkan, dan beralih saat sasaran tercapai.
  • Verifikasi memastikan integritas data sebelum lalu lintas dibuka kembali.
  • Praktik terbaik mencakup pengujian pemulihan secara berkala, pemantauan arsip, dan penyimpanan WAL di luar lokasi.

PITR adalah jaring pengaman Anda terhadap kesalahan manusia dan kerusakan data — kuasai konsep ini dan Anda akan menguasai pemulihan bencana.

Gratis untuk memulai

Belajar SQL dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
46
Pelajaran
183

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemulihan Titik Waktu” gratis?

Ya — teks lengkap “Pemulihan Titik Waktu” 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 “Pemulihan Titik Waktu”?

Pulihkan ke waktu apa pun dengan WAL. 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 2 dari 4.

Berapa lama pelajaran “Pemulihan Titik Waktu” 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