All Products
Search
Document Center

ApsaraDB RDS:Gunakan fitur recycle bin

Last Updated:Jun 25, 2025

Operasi bahasa definisi data (DDL) bersifat permanen dan tidak dapat dikembalikan. Kesalahan pengguna dapat menyebabkan kehilangan data, seperti saat menjalankan pernyataan DROP TABLE. Alibaba Cloud menyediakan fitur recycle bin yang memungkinkan Anda sementara menyimpan tabel yang dihapus di dalam recycle bin. Anda dapat menentukan periode retensi untuk mengambil kembali tabel yang telah dihapus. Selain itu, paket DBMS_RECYCLE disediakan untuk membantu Anda mengelola tabel yang dihapus.

Prasyarat

Instansi RDS harus menjalankan salah satu versi MySQL berikut:

  • MySQL 8.0 dengan versi mesin minor 20191225 atau lebih baru

  • MySQL 5.7 dengan versi mesin minor 20210430 atau lebih baru

Parameter

Tabel berikut menjelaskan parameter yang dapat dikonfigurasikan untuk fitur recycle bin.

Parameter

Deskripsi

loose_recycle_bin

Menentukan apakah akan mengaktifkan fitur recycle bin. Anda dapat mengaktifkan fitur ini untuk instansi RDS Anda atau untuk sesi tertentu. Anda dapat memodifikasi parameter ini di konsol ApsaraDB RDS. Nilai default: OFF

loose_recycle_bin_retention

Periode waktu untuk menyimpan tabel di dalam recycle bin. Unit: detik. Nilai default: 604800. Nilai default tersebut menunjukkan tujuh hari. Anda dapat memodifikasi parameter ini di konsol ApsaraDB RDS.

loose_recycle_scheduler

Menentukan apakah akan mengaktifkan thread yang digunakan untuk membersihkan recycle bin secara asinkron. Anda dapat memodifikasi parameter ini di konsol ApsaraDB RDS. Nilai default: OFF

loose_recycle_scheduler_interval

Interval polling yang diikuti oleh thread yang digunakan untuk menghapus tabel dari recycle bin secara asinkron. Unit: detik. Nilai default: 30. Parameter ini sementara tidak tersedia.

loose_recycle_scheduler_purge_table_print

Menentukan apakah mencatat log yang dihasilkan ketika sistem membersihkan recycle bin secara asinkron. Nilai default: OFF Parameter ini sementara tidak tersedia.

Penting

Untuk mencegah ruang disk habis, disarankan menetapkan parameter loose_recycle_bin_retention ke nilai optimal dan mengaktifkan parameter loose_recycle_scheduler.

Deskripsi fitur

  • Penghapusan dan Pemulihan

    • Daur Ulang

      Ketika pernyataan TRUNCATE TABLE dijalankan, sistem memindahkan tabel yang dipotong ke recycle bin dan membuat tabel baru dengan skema yang sama di direktori aslinya.

      Catatan

      Mekanisme ini hanya didukung pada instansi RDS yang menjalankan MySQL 8.0 dengan versi mesin minor 20200331 atau lebih baru.

      Ketika pernyataan DROP TABLE or DROP DATABASE dijalankan, sistem memindahkan objek terkait tabel yang dihapus ke recycle bin. Objek lainnya dihapus berdasarkan kebijakan berikut:

      • Jika objek tidak terkait dengan tabel yang dihapus, sistem menentukan apakah akan mempertahankannya berdasarkan pernyataan yang dijalankan. Objek tersebut tidak didaur ulang.

      • Jika objek bergantung pada tabel yang dihapus dan dapat memodifikasi data, sistem menghapus objek tersebut, termasuk pemicu dan kunci asing. Statistik kolom dipindahkan ke recycle bin bersama dengan tabel yang dihapus.

    • Pembersihan

      Recycle bin memulai thread latar belakang untuk membersihkan tabel yang melebihi periode retensi yang ditentukan oleh parameter recycle_bin_retention. Untuk tabel dengan jumlah data besar, sistem memulai thread tambahan untuk membersihkan tabel secara asinkron.

  • Kontrol Izin

    Saat instansi RDS dimulai, basis data bernama __recycle_bin__ dibuat untuk menyimpan data yang dipindahkan ke recycle bin. Basis data __recycle_bin__ adalah basis data sistem yang tidak dapat dimodifikasi atau dihapus.

    Anda tidak dapat menggunakan pernyataan DROP TABLE untuk menghapus tabel dari recycle bin. Namun, Anda dapat menggunakan metode call dbms_recycle.purge_table('<TABLE>'); untuk menghapus tabel.

    Catatan

    Akun yang digunakan harus memiliki izin untuk menjalankan pernyataan DROP baik pada instansi RDS maupun pada recycle bin.

  • Penamaan Tabel di Recycle Bin

    Tabel di dalam basis data __recycle_bin__ berasal dari basis data yang berbeda dan mungkin memiliki nama yang sama. Untuk memastikan setiap tabel memiliki nama unik di recycle bin, sistem menerapkan konvensi penamaan berikut:

    "__" + <Storage Engine> + <SE private id>

    Tabel berikut menjelaskan parameter.

    Parameter

    Deskripsi

    Storage Engine

    Nama mesin penyimpanan.

    SE private id

    Nilai unik yang dihasilkan oleh mesin penyimpanan untuk mengidentifikasi tabel. Sebagai contoh, nilai unik yang digunakan untuk mengidentifikasi tabel InnoDB adalah ID tabel.

  • Daur Ulang Mandiri

    Konfigurasi recycle bin untuk instansi RDS hanya berlaku untuk instansi tersebut. Konfigurasi recycle bin untuk instansi RDS utama tidak berlaku untuk instansi RDS sekunder, hanya-baca, atau pemulihan bencana ke mana log biner direplikasi. Misalnya, Anda dapat menentukan periode retensi 7 hari pada instansi RDS utama dan 14 hari pada instansi RDS sekunder.

    Catatan

    Penggunaan penyimpanan instansi RDS bervariasi berdasarkan periode retensi yang ditentukan pada instansi tersebut.

Catatan penggunaan

  • Jika basis data __recycle_bin__ dan tabel yang ingin didaur ulang berada di sistem file yang berbeda, sistem mungkin memigrasi file data terkait dari tablespace setelah pernyataan DROP TABLE dijalankan. Proses ini membutuhkan waktu.

  • Tablespace umum dapat menyimpan lebih dari satu tabel. Jika pernyataan DROP TABLE dijalankan untuk menghapus tabel dari tablespace umum, sistem tidak memigrasi file data terkait dari tablespace tersebut.

Kelola recycle bin

AliSQL memungkinkan Anda melakukan operasi berikut pada recycle bin:

  • Lihat semua tabel yang disimpan sementara di recycle bin.

    Jalankan perintah berikut untuk memanggil antarmuka yang diperlukan di DBMS_RECYCLE guna menampilkan semua tabel yang disimpan sementara di recycle bin:

    call dbms_recycle.show_tables();

    Contoh:

    mysql> call dbms_recycle.show_tables();
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME       | PURGE_TIME          |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | __recycle_bin__ | __innodb_1063 | product_db    | t1           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1064 | product_db    | t2           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1065 | product_db    | parent       | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1066 | product_db    | child        | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    4 rows in set (0.00 sec)

    Parameter

    Deskripsi

    SCHEMA

    Nama basis data yang menyimpan tabel setelah tabel dipindahkan ke recycle bin.

    TABLE

    Nama tabel setelah tabel dipindahkan ke recycle bin.

    ORIGIN_SCHEMA

    Nama basis data yang menyimpan tabel sebelum tabel dipindahkan ke recycle bin.

    ORIGIN_TABLE

    Nama tabel sebelum tabel dipindahkan ke recycle bin.

    RECYCLED_TIME

    Waktu saat tabel dipindahkan ke recycle bin.

    PURGE_TIME

    Waktu ketika tabel diharapkan dihapus dari recycle bin.

  • Hapus tabel dari recycle bin.

    Jalankan perintah berikut untuk memanggil antarmuka yang diperlukan di DBMS_RECYCLE guna menghapus tabel di recycle bin:

    call dbms_recycle.purge_table('<TABLE>');
    Catatan
    • Parameter TABLE menentukan nama tabel setelah dipindahkan ke recycle bin.

    • Akun yang digunakan harus memiliki izin untuk menjalankan pernyataan DROP baik pada instansi RDS maupun pada recycle bin.

    Contoh:

    call dbms_recycle.purge_table('__innodb_1063');
  • Pulihkan tabel dari recycle bin.

    • Jalankan perintah berikut untuk memanggil antarmuka yang diperlukan di DBMS_RECYCLE guna memulihkan tabel di recycle bin:

      call dbms_recycle.restore_table('<RECYCLE_TABLE>','<DEST_DB>','<DEST_TABLE>');

      Tabel berikut menjelaskan parameter.

      Parameter

      Deskripsi

      RECYCLE_TABLE

      Nama tabel di recycle bin.

      Catatan

      Jika Anda hanya menentukan parameter ini, data tabel asli dipulihkan.

      DEST_DB

      Nama basis data tujuan ke mana Anda ingin memulihkan tabel.

      DEST_TABLE

      Nama tabel tujuan.

      Catatan

      Kredensial super-user diperlukan untuk menjalankan perintah restore_table. Oleh karena itu, Anda tidak dapat menjalankan perintah ini.

      Contoh:

      mysql> call dbms_recycle.restore_table('__innodb_1063','testDB','testTable');
    • Jalankan pernyataan INSERT ... SELECT untuk memulihkan tabel di recycle bin.

      Kueri tabel yang disimpan sementara di recycle bin. Periksa nama tabel yang ingin dipulihkan di basis data __recycle_bin__ dari keluaran pernyataan SQL. Buat tabel tujuan dengan skema yang sama dengan tabel sumber dan jalankan pernyataan INSERT ... SELECT untuk mengimpor data ke tabel tujuan. Contoh kode:

      mysql> call dbms_recycle.show_tables();
      +-----------------+---------------+---------------+--------------+---------------------+---------------------+
      | SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME       | PURGE_TIME          |
      +-----------------+---------------+---------------+--------------+---------------------+---------------------+
      | __recycle_bin__ | __innodb_1132 | sbtest        | sbtest1      | 2024-07-31 15:08:56 | 2024-08-07 15:08:56 |
      +-----------------+---------------+---------------+--------------+---------------------+---------------------+
      1 row in set (0.00 sec)
      
      mysql> CREATE TABLE `db1`.`t1` (
          ->   `id` int NOT NULL AUTO_INCREMENT,
          ->   `k` int NOT NULL DEFAULT '0',
          ->   `c` char(120) NOT NULL DEFAULT '',
          ->   `pad` char(60) NOT NULL DEFAULT '',
          ->   PRIMARY KEY (`id`),
          ->   KEY `k_1` (`k`)
          -> ) ENGINE=InnoDB AUTO_INCREMENT=400001 DEFAULT CHARSET=utf8mb3;
      Query OK, 0 rows affected, 1 warning (0.01 sec)
      
      mysql> insert into `db1`.`t1` select * from `__recycle_bin__`.`__innodb_1132`;
      Query OK, 400000 rows affected (2.76 sec)
      Records: 400000  Duplicates: 0  Warnings: 0