All Products
Search
Document Center

ApsaraDB RDS:Recycle bin

Last Updated:May 13, 2026

Operasi DDL yang tidak disengaja seperti DROP TABLE dapat menyebabkan kehilangan data karena tidak dapat dikembalikan (rollback). Untuk mengurangi risiko tersebut, Alibaba Cloud menyediakan fitur recycle bin. Fitur ini sementara memindahkan tabel yang dihapus ke recycle bin, memungkinkan Anda mengonfigurasi periode retensi untuk pemulihan data yang mudah, serta menyertakan paket DBMS_RECYCLE untuk pengelolaan.

Prasyarat

Instans Anda menjalankan salah satu versi berikut:

  • RDS for MySQL 8.4

  • RDS for MySQL 8.0 dengan versi mesin minor 20191225 atau lebih baru

  • RDS for MySQL 5.7 dengan versi mesin minor 20210430 atau lebih baru

Parameter recycle bin

Fitur recycle bin mencakup lima parameter:

Parameter

Description

loose_recycle_bin

Menentukan apakah fitur recycle bin diaktifkan pada tingkat session dan tingkat global. Anda dapat mengubah parameter ini di Konsol. Nilai default: OFF.

loose_recycle_bin_retention

Menentukan periode retensi, dalam detik, untuk tabel di recycle bin. Nilai default adalah 604.800 (satu minggu). Anda dapat mengubah parameter ini di Konsol.

loose_recycle_scheduler

Menentukan apakah thread purge asinkron untuk recycle bin diaktifkan. Anda dapat mengubah parameter ini di Konsol. Nilai default: OFF.

loose_recycle_scheduler_interval

Interval polling untuk thread purge asinkron, dalam detik. Nilai default adalah 30. Parameter ini tidak dapat diubah.

loose_recycle_scheduler_purge_table_print

Menentukan apakah log detail untuk operasi purge asinkron dicetak. Nilai default: OFF. Parameter ini tidak dapat diubah.

Penting

Untuk mencegah kehabisan ruang disk, atur periode retensi yang wajar dan aktifkan thread purge latar belakang.

Cara kerja

  • Mekanisme recycling dan purging

    • Mekanisme recycling

      Pernyataan TRUNCATE TABLE memindahkan tabel asli ke direktori recycle bin khusus dan membuat tabel baru dengan struktur yang sama di tempatnya.

      Catatan

      Fitur ini hanya didukung pada versi berikut:

      • RDS for MySQL 8.4

      • RDS for MySQL 8.0 dengan versi mesin minor 20200331 atau lebih baru

      Pernyataan DROP TABLE atau DROP DATABASE hanya memindahkan objek tabel terkait ke direktori recycle bin khusus. Objek lain ditangani sebagai berikut:

      • Operasi tersebut tidak mendaur ulang objek yang tidak terkait dengan tabel. Objek tersebut dipertahankan atau dihapus sesuai dengan pernyataan operasi spesifik.

      • Operasi tersebut menghapus objek dependen yang dapat memodifikasi data tabel, seperti trigger dan foreign keys. Namun, statistik kolom tidak di-purge, melainkan dipindahkan ke recycle bin bersama tabelnya.

    • Mekanisme purging

      Recycle bin menjalankan thread latar belakang untuk secara asinkron mem-purge objek tabel yang telah melebihi periode retensi yang ditetapkan oleh parameter loose_recycle_bin_retention. Jika purge menemui tabel besar, thread latar belakang lain akan dijalankan untuk menghapus tabel tersebut secara asinkron.

  • Izin

    Saat instans RDS for MySQL dimulai, sistem menginisialisasi database bernama __recycle_bin__, yang digunakan secara eksklusif oleh recycle bin. __recycle_bin__ adalah database sistem yang tidak dapat Anda modifikasi atau hapus secara langsung.

    Meskipun Anda tidak dapat menjalankan pernyataan drop table secara langsung pada tabel di recycle bin, Anda dapat menggunakan perintah call dbms_recycle.purge_table('<TABLE>'); untuk mem-purge-nya.

    Catatan

    Akun memerlukan izin DROP baik pada tabel asli maupun pada tabel di recycle bin.

  • Konvensi penamaan tabel di recycle bin

    Recycle bin menggabungkan tabel dari berbagai database ke dalam satu database __recycle_bin__. Untuk memastikan nama tabel unik, recycle bin menggunakan format berikut:

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

    Tabel berikut menjelaskan komponen format penamaan tersebut.

    Parameter

    Description

    Storage engine

    Nama storage engine.

    SE private id

    ID unik yang dihasilkan oleh storage engine untuk setiap tabel. Misalnya, pada engine InnoDB, ini adalah ID tabel.

  • Recycling independen

    Pengaturan recycle bin hanya berlaku pada instans lokal. Pengaturan tersebut tidak diteruskan ke node yang memiliki replikasi log aktif, seperti instans secondary, instans hanya baca, dan instans pemulihan bencana. Sebagai contoh, Anda dapat mengonfigurasi periode retensi 7 hari pada instans primary dan periode retensi 14 hari pada instans secondary.

    Catatan

    Periode retensi yang berbeda dapat menyebabkan perbedaan signifikan dalam penggunaan ruang disk antar instans.

Catatan penggunaan

  • Jika database recycle bin dan tabel yang akan didaur ulang berada pada sistem file yang berbeda, menjalankan pernyataan drop table akan memicu migrasi file data yang memakan waktu.

  • Ketika sebuah tabel berbagi ruang tabel umum dengan tabel lain, proses recycling tabel tersebut tidak memindahkan file data terkait.

Mengelola recycle bin

AliSQL menyediakan tiga fungsi dalam paket DBMS_RECYCLE untuk mengelola recycle bin:

  • Menampilkan tabel di recycle bin

    Untuk melihat semua tabel di recycle bin, gunakan perintah berikut dari paket DBMS_RECYCLE:

    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

    Description

    SCHEMA

    Nama database untuk recycle bin.

    TABLE

    Nama tabel di recycle bin.

    ORIGIN_SCHEMA

    Nama database asli.

    ORIGIN_TABLE

    Nama tabel asli.

    RECYCLED_TIME

    Waktu saat tabel dipindahkan ke recycle bin.

    PURGE_TIME

    Waktu saat tabel dijadwalkan untuk di-purge dari recycle bin.

  • Mem-purge tabel secara manual dari recycle bin

    Untuk mem-purge tabel secara manual dari recycle bin, gunakan perintah berikut dari paket DBMS_RECYCLE:

    call dbms_recycle.purge_table('<TABLE>');
    Catatan
    • <TABLE> adalah nama tabel di recycle bin.

    • Akun memerlukan izin DROP baik pada tabel asli maupun pada tabel di recycle bin.

    Contoh:

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

    • Untuk memulihkan tabel dari recycle bin, gunakan antarmuka yang disediakan oleh paket DBMS_RECYCLE.

      Perintahnya adalah sebagai berikut:

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

      Tabel berikut menjelaskan parameter-parameter tersebut.

      Parameter

      Description

      RECYCLE_TABLE

      Nama tabel di recycle bin yang akan dipulihkan.

      Catatan

      Jika Anda hanya menentukan parameter ini, tabel akan dipulihkan ke lokasi aslinya dengan nama aslinya.

      DEST_DB

      Nama database tujuan.

      DEST_TABLE

      Nama tabel tujuan.

      Catatan

      Perintah restore_table memerlukan izin SUPER. Karena akun pengguna tidak diberikan izin ini, Anda tidak dapat menjalankan perintah ini secara manual.

      Contoh:

      mysql> call dbms_recycle.restore_table('__innodb_1063','testDB','testTable');
    • Memulihkan data dari tabel di recycle bin menggunakan INSERT ... SELECT.

      Pertama, tanyakan semua tabel di recycle bin untuk menemukan nama tabel yang ingin Anda pulihkan di database __recycle_bin__. Kemudian, buat tabel tujuan dengan struktur yang sama dan gunakan pernyataan INSERT ... SELECT untuk mengimpor data ke tabel tujuan. Contohnya:

      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