Menggunakan pemulihan point-in-time (PITR)

Halaman ini menjelaskan cara menggunakan pemulihan point-in-time (PITR) untuk memulihkan instance Cloud SQL utama Anda.

Untuk mempelajari PITR lebih lanjut, lihat PITR.

Secara default, PITR diaktifkan saat Anda membuat instance edisi Cloud SQL Enterprise Plus, terlepas dari apakah Anda membuat instance dengan menggunakan Konsol Google Cloud, gcloud CLI, Terraform, atau Cloud SQL Admin API.

Jika Anda membuat instance edisi Cloud SQL Enterprise di Google Cloud Console, PITR akan diaktifkan secara default. Atau, jika Anda membuat instance menggunakan gcloud CLI, Terraform, atau Cloud SQL Admin API, Anda harus mengaktifkan PITR secara manual.

Penyimpanan log untuk PITR

Cloud SQL menggunakan pengarsipan write-ahead logging (WAL) untuk PITR.

Pada 9 Januari 2023, kami meluncurkan penyimpanan write-ahead log untuk PITR di Cloud Storage. Sejak peluncuran ini, kondisi berikut berlaku:

  • Semua instance Cloud SQL Enterprise Plus menyimpan log write-ahead mereka di Cloud Storage. Hanya instance edisi Cloud SQL Enterprise Plus yang Anda upgrade dari edisi Cloud SQL Enterprise dan telah mengaktifkan PITR sebelum 9 Januari 2023 yang akan terus menyimpan log mereka di disk.
  • Instance Cloud SQL Enterprise yang dibuat dengan PITR yang diaktifkan sebelum 9 Januari 2023 akan terus menyimpan log-nya di disk.
  • Semua instance edisi Cloud SQL Enterprise yang Anda buat dengan PITR yang diaktifkan setelah 9 Januari 2023 akan menyimpan log di Cloud Storage.

Untuk instance yang menyimpan write-ahead log hanya di disk, Anda dapat memindahkan log dari disk ke Cloud Storage dengan menonaktifkan terlebih dahulu lalu mengaktifkan kembali PITR.

Periode retensi catatan

Untuk melihat apakah instance menyimpan log yang digunakan untuk PITR di Cloud Storage, gunakan Memeriksa lokasi penyimpanan log transaksi yang digunakan untuk PITR.

Setelah Anda menggunakan klien PostgreSQL seperti psql atau pgAdmin untuk terhubung ke database instance, jalankan perintah berikut: show archive_command. Jika ada write-ahead log yang diarsipkan di Cloud Storage, Anda akan melihat -async_archive -remote_storage.

Semua instance lain yang sudah ada dan mengaktifkan PITR akan tetap menyimpan log-nya di disk. Perubahan pada penyimpanan log di Cloud Storage tersedia pada lain waktu.

Jika log disimpan di Cloud Storage, Cloud SQL akan mengupload log setiap lima menit atau kurang. Akibatnya, jika instance Cloud SQL tersedia, instance tersebut dapat dipulihkan ke waktu terakhir. Namun, jika instance tidak tersedia, tujuan titik pemulihan biasanya lima menit atau kurang. Gunakan gcloud CLI atau Admin API untuk memeriksa waktu terakhir pemulihan instance, dan lakukan pemulihan pada waktu tersebut.

Write-ahead log yang digunakan dengan PITR dihapus secara otomatis dengan cadangan otomatis yang terkait, yang biasanya terjadi setelah nilai yang ditetapkan untuk transactionLogRetentionDays terpenuhi. Ini adalah jumlah hari log transaksi yang dipertahankan Cloud SQL untuk PITR. Untuk edisi Cloud SQL Enterprise Plus, jumlah hari log transaksi yang dipertahankan dapat ditetapkan dari 1 sampai 35, dan untuk edisi Cloud SQL Enterprise, nilainya dapat ditetapkan dari 1 sampai 7.

Saat memulihkan cadangan pada instance Cloud SQL sebelum mengaktifkan PITR, Anda akan kehilangan write-ahead log yang memungkinkan pengoperasian PITR.

Untuk instance yang mengaktifkan kunci enkripsi yang dikelola pelanggan (CMEK), log write-ahead akan dienkripsi menggunakanCMEK versi terbaru. Untuk melakukan pemulihan, semua versi kunci yang terbaru untuk jumlah hari yang Anda konfigurasi untuk parameter retained-transaction-log-days harus tersedia.

Untuk instance yang memiliki log write-ahead yang disimpan di Cloud Storage, log tersebut akan disimpan di region yang sama dengan instance utama. Penyimpanan log ini (hingga 35 hari untuk edisi Cloud SQL Enterprise Plus dan tujuh hari untuk edisi Cloud SQL Enterprise, panjang maksimum untuk PITR) tidak menimbulkan biaya tambahan per instance.

Log dan penggunaan disk

Jika instance Anda telah mengaktifkan PITR, dan jika ukuran write-ahead log pada disk menyebabkan masalah bagi instance Anda:

  • Anda dapat menonaktifkan PITR dan mengaktifkannya kembali untuk memastikan bahwa log baru disimpan di Cloud Storage di region yang sama dengan instance. Namun, semua log write-ahead yang ada akan dihapus, sehingga Anda tidak dapat melakukan pemulihan point-in-time lebih awal dari saat Anda mengaktifkan kembali PITR.

  • Anda dapat meningkatkan ukuran penyimpanan instance. Namun, peningkatan ukuran log write-ahead dalam penggunaan disk mungkin bersifat sementara.

  • Sebaiknya aktifkan peningkatan penyimpanan otomatis untuk menghindari masalah penyimpanan yang tidak terduga. Rekomendasi ini hanya berlaku jika instance Anda telah mengaktifkan PITR dan log Anda disimpan di disk.

  • Anda dapat menonaktifkan PITR jika ingin menghapus log dan memulihkan penyimpanan. Menurunkan log write-ahead yang digunakan tidak akan mengurangi ukuran disk yang disediakan untuk instance.

  • Log dihapus permanen sekali sehari, bukan terus-menerus. Menetapkan retensi log menjadi dua hari berarti setidaknya dua hari log, dan maksimal tiga hari log, akan dipertahankan. Sebaiknya tetapkan jumlah cadangan ke satu lebih dari jumlah hari retensi log untuk menjamin retensi log minimum pada hari tertentu.

Mengaktifkan PITR

Saat Anda membuat instance baru di konsol Google Cloud, baik Pencadangan otomatis dan Aktifkan pemulihan point-in-time akan diaktifkan secara otomatis.

Prosedur berikut memungkinkan PITR pada instance utama yang sudah ada.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka menu tindakan lainnya Ikon tindakan lainnya. untuk instance yang ingin Anda aktifkan PITRnya, lalu klik Edit.
  3. Di bagian Customize your instance, luaskan bagian Data Protection.
  4. Pilih kotak centang Aktifkan pemulihan point-in-time.
  5. Perluas Opsi lanjutan.
  6. Masukkan jumlah hari untuk menyimpan log, dari 1-35 untuk edisi Cloud SQL Enterprise Plus, atau 1-7 untuk edisi Cloud SQL Enterprise.
  7. Klik Save.

gcloud

  1. Tampilkan ringkasan instance:
    gcloud sql instances describe INSTANCE_NAME
  2. Jika Anda melihat enabled: false di bagian backupConfiguration, aktifkan pencadangan terjadwal:
    gcloud sql instances patch INSTANCE_NAME \
    --backup-start-time=HH:MM

    Tentukan parameter backup-start-time menggunakan waktu 24 jam dalam zona waktu UTC±00.

  3. Aktifkan PITR:
    gcloud sql instances patch INSTANCE_NAME \
    --enable-point-in-time-recovery

    Jika mengaktifkan PITR pada instance utama, Anda juga dapat mengonfigurasi jumlah hari untuk mempertahankan log transaksi dengan menambahkan parameter berikut:

    --retained-transaction-log-days=RETAINED_TRANSACTION_LOG_DAYS
  4. Konfirmasi perubahan Anda:
    gcloud sql instances describe INSTANCE_NAME

    Pada bagian backupConfiguration, Anda akan melihat pointInTimeRecoveryEnabled: true jika perubahan berhasil.

Terraform

Untuk mengaktifkan PITR, gunakan resource Terraform.

resource "google_sql_database_instance" "postgres_instance_pitr" {
  name             = ""
  region           = "us-central1"
  database_version = "POSTGRES_14"
  settings {
    tier = "db-custom-2-7680"
    backup_configuration {
      enabled                        = true
      point_in_time_recovery_enabled = true
      start_time                     = "20:55"
      transaction_log_retention_days = "3"
    }
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

Menerapkan perubahan

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

Menghapus perubahan

Untuk menghapus perubahan Anda, lakukan langkah-langkah berikut:

  1. Untuk menonaktifkan perlindungan penghapusan, di file konfigurasi Terraform Anda, tetapkan argumen deletion_protection ke false.
    deletion_protection =  "false"
  2. Terapkan konfigurasi Terraform terbaru dengan menjalankan perintah berikut dan memasukkan yes pada perintah:
    terraform apply
  1. Hapus resource yang sebelumnya diterapkan dengan konfigurasi Terraform Anda dengan menjalankan perintah berikut dan memasukkan yes pada prompt:

    terraform destroy

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance
  • INSTANCE_NAME: nama instance replika utama atau baca yang Anda konfigurasi untuk ketersediaan tinggi
  • START_TIME: waktu (dalam jam dan menit)

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: ID atau nomor project project Google Cloud yang berisi instance
  • INSTANCE_NAME: nama instance replika utama atau baca yang Anda konfigurasi untuk ketersediaan tinggi
  • START_TIME: waktu (dalam jam dan menit)

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "startTime": "START_TIME",
      "enabled": true,
      "pointInTimeRecoveryEnabled": true
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Mendapatkan waktu pemulihan terbaru

Untuk instance yang tersedia, Anda dapat melakukan PITR ke waktu terbaru. Jika instance tidak tersedia dan log instance disimpan di Cloud Storage, Anda dapat mengambil waktu pemulihan terbaru dan melakukan PITR pada waktu tersebut. Di kedua kasus tersebut, Anda dapat memulihkan instance ke zona yang berbeda dengan memberikan nilai untuk zona yang diinginkan.

gcloud

Dapatkan waktu terbaru untuk memulihkan instance Cloud SQL yang tidak tersedia.

Ganti INSTANCE_NAME dengan nama instance yang dibuatkan kueri.

gcloud sql instances get-latest-recovery-time INSTANCE_NAME

REST v1

Sebelum menggunakan salah satu data permintaan, buatlah pengganti berikut:

  • PROJECT_ID: project ID
  • INSTANCE_NAME: nama instance yang dibuatkan kueri untuk waktu pemulihan terakhir

Metode HTTP dan URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan menerima respons JSON seperti berikut:

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

REST v1beta4

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: project ID
  • INSTANCE_NAME: nama instance yang dibuatkan kueri untuk waktu pemulihan terakhir

Metode HTTP dan URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime

Untuk mengirim permintaan, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

{
  "kind": "sql#getLatestRecoveryTime",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}

Melakukan PITR

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka menu tindakan lainnya Ikon tindakan lainnya. untuk instance yang ingin pulihkan, lalu klik Create clone.
  3. Secara opsional, di halaman Create a clone, perbarui ID clone baru tersebut.
  4. Pilih Clone dari titik waktu sebelumnya.
  5. Masukkan waktu PITR.
  6. Klik Create clone.

gcloud

Buat clone menggunakan PITR.

Ganti kode berikut:

  • SOURCE_INSTANCE_NAME - Nama instance tempat Anda memulihkan.
  • NEW_INSTANCE_NAME - Nama untuk clone.
  • TIMESTAMP - Zona waktu UTC untuk instance sumber dalam format RFC 3339. Misalnya, 2012-11-15T16:19:00.094Z.
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • target-instance-id: ID instance target
  • source-instance-id: ID instance sumber
  • restore-timestamp Point-in-time untuk memulihkan hingga

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • target-instance-id: ID instance target
  • source-instance-id: ID instance sumber
  • restore-timestamp Point-in-time untuk memulihkan hingga

Metode HTTP dan URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

Meminta isi JSON:

{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Nonaktifkan PITR

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka menu tindakan lainnya Ikon tindakan lainnya. untuk instance yang ingin Anda nonaktifkan, lalu pilih Edit.
  3. Di bawah Customize your instance, luaskan bagian Data Protection.
  4. Hapus opsi Aktifkan pemulihan point-in-time.
  5. Klik Save.
  6. Di halaman Overview untuk instance, di bagian Configuration, setelan PITR dicantumkan sebagai dinonaktifkan.

gcloud

  1. Nonaktifkan pemulihan point-in-time:
    gcloud sql instances patch INSTANCE_NAME \
    --no-enable-point-in-time-recovery
  2. Konfirmasi perubahan Anda:
    gcloud sql instances describe INSTANCE_NAME

    Di bagian backupConfiguration, Anda akan melihat pointInTimeRecoveryEnabled: false jika perubahan berhasil.

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Sebelum menggunakan salah satu dari data permintaan, lakukan penggantian berikut:

  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "enabled": false,
      "pointInTimeRecoveryEnabled": false
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Memeriksa lokasi penyimpanan log transaksi yang digunakan untuk PITR

Anda dapat memeriksa tempat instance Cloud SQL Anda menyimpan log transaksi yang digunakan untuk PITR.

gcloud

Untuk menentukan apakah instance Anda menyimpan log untuk PITR pada disk atau Cloud Storage, gunakan perintah berikut:

   gcloud sql instances describe INSTANCE_NAME
   

Ganti INSTANCE_NAME dengan nama instance.

Dalam output perintah, kolom transactionalLogStorageState memberikan informasi tentang tempat log transaksi untuk PITR disimpan untuk instance. Status penyimpanan log transaksi yang mungkin adalah sebagai berikut:

  • DISK: instance menyimpan log transaksi yang digunakan untuk PITR pada disk.
  • CLOUD_STORAGE: instance menyimpan log transaksi yang digunakan untuk PITR di Cloud Storage.

Menetapkan retensi log transaksi

Untuk menetapkan jumlah hari guna mempertahankan log write-ahead:

Konsol

  1. Di konsol Google Cloud, buka halaman Instance Cloud SQL.

    Buka Instance Cloud SQL

  2. Buka menu tindakan lainnya Ikon tindakan lainnya. untuk instance yang ingin Anda gunakan untuk menetapkan log transaksi, lalu pilih Edit.
  3. Di bawah Customize your instance, luaskan bagian Data Protection.
  4. Di bagian Aktifkan pemulihan point-in-time, luaskan Opsi lanjutan.
  5. Masukkan jumlah hari untuk menyimpan log, dari 1-35 untuk edisi Cloud SQL Enterprise Plus atau 1-7 untuk edisi Cloud SQL Enterprise.
  6. Klik Save.

gcloud

Edit instance untuk menetapkan jumlah hari untuk mempertahankan log write-ahead.

Ganti kode berikut:

  • INSTANCE-NAME - Nama instance yang ingin Anda tetapkan log transaksinya.
  • DAYS-TO-RETAIN - Jumlah hari log transaksi yang perlu disimpan. Untuk edisi Cloud SQL Enterprise Plus, rentang yang valid adalah antara 1 dan 35 hari, dengan default 14 hari. Untuk edisi Cloud SQL Enterprise, rentang yang valid adalah antara 1 dan 7 hari, dengan default 7 hari. Jika tidak ada nilai yang ditentukan, nilai default akan digunakan. Hanya valid jika PITR diaktifkan. Menyimpan log transaksi dalam waktu yang lebih lama memerlukan ukuran penyimpanan yang lebih besar.

  gcloud sql instances patch INSTANCE-NAME \
    --retained-transaction-log-days=DAYS-TO-RETAIN
  

REST v1

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • days-to-retain: Jumlah hari untuk menyimpan log transaksi, dari 1 hingga 7
  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

REST v1beta4

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • days-to-retain: Jumlah hari untuk menyimpan log transaksi, dari 1 hingga 7
  • project-id: ID project
  • instance-id: ID instance

Metode HTTP dan URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

Meminta isi JSON:

{
  "settings":
  {
    "backupConfiguration":
    {
      "transactionLogRetentionDays": "days-to-retain"
    }
  }
}

Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:

Anda akan melihat respons JSON seperti berikut:

Langkah selanjutnya