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. |
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 TABLEdijalankan, sistem memindahkan tabel yang dipotong ke recycle bin dan membuat tabel baru dengan skema yang sama di direktori aslinya.CatatanMekanisme 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 DATABASEdijalankan, 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 TABLEuntuk menghapus tabel dari recycle bin. Namun, Anda dapat menggunakan metodecall dbms_recycle.purge_table('<TABLE>');untuk menghapus tabel.CatatanAkun 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.
CatatanPenggunaan 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 TABLEdijalankan. 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>');CatatanParameter 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.
CatatanJika 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.
CatatanKredensial 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 ... SELECTuntuk 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 pernyataanINSERT ... SELECTuntuk 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