All Products
Search
Document Center

ApsaraDB RDS:Native flashback

Last Updated:May 13, 2026

Fitur native flashback memungkinkan Anda menggunakan pernyataan SQL untuk mengkueri atau memulihkan data ke titik waktu tertentu, sehingga Anda dapat dengan cepat mengambil data historis setelah terjadi operasi yang tidak disengaja.

Ikhtisar

Operasi yang tidak disengaja selama pemeliharaan database dapat berdampak serius terhadap bisnis Anda. Metode pemulihan data tradisional, seperti Binlog Flashback, umumnya kompleks, rentan kesalahan, dan memakan waktu. Pemulihan data dari set cadangan memerlukan sumber daya sistem tambahan, dan waktu pemulihannya bisa tidak dapat diprediksi saat menangani volume data yang besar.

AliSQL memperkenalkan fitur native flashback untuk engine InnoDB, yang menghilangkan kebutuhan akan operasi pemulihan yang kompleks. Dengan fitur ini, Anda dapat menggunakan pernyataan SQL sederhana untuk mengkueri atau memulihkan data historis dari sebelum terjadinya operasi yang tidak disengaja, sehingga menghemat waktu berharga dan menjamin kelangsungan bisnis.

Prasyarat

Untuk menggunakan fitur ini, versi database instans Anda harus memenuhi persyaratan berikut. Jika versi mesin minor tidak memenuhi persyaratan, Anda dapat memperbaruinya.

  • MySQL 8.4

  • MySQL 8.0 dengan versi mesin minor 20210930 atau lebih baru.

Batasan

  • Hanya tabel dengan engine InnoDB yang didukung.

  • Fitur ini mengonsumsi tablespace undo tambahan. Anda dapat mengonfigurasi ukuran maksimumnya melalui parameter innodb_undo_space_supremum_size.

  • Kueri native flashback mengembalikan data dari titik waktu yang paling dekat dengan timestamp yang ditentukan. Kecocokan eksak tidak dijamin.

  • Mengkueri dan memulihkan data historis yang melibatkan operasi DDL tidak didukung. Sebagai contoh, Anda tidak dapat menggunakan native flashback untuk mengkueri konten tabel yang telah di-drop.

Sintaksis

Fitur native flashback memperkenalkan klausa AS OF untuk menentukan titik waktu tujuan. Sintaksisnya adalah sebagai berikut:

SELECT ... FROM <table_name>
  AS OF TIMESTAMP <expression>;

Ekspresi tersebut menentukan titik waktu target dan mendukung beberapa format. Contoh:

SELECT ... FROM tablename
  AS OF TIMESTAMP '2020-11-11 00:00:00';

SELECT ... FROM tablename
  AS OF TIMESTAMP now();

SELECT ... FROM tablename
  AS OF TIMESTAMP (SELECT now());

SELECT ... FROM tablename
  AS OF TIMESTAMP DATE_SUB(now(), INTERVAL 1 minute);

Parameter

Parameter berikut mengonfigurasi fitur native flashback:

Parameter

Deskripsi

innodb_rds_flashback_task_enabled

  • Deskripsi: Mengaktifkan atau menonaktifkan fitur native flashback.

  • Format command-line: --innodb-rds-flashback-task-enabled=#.

  • Cakupan: parameter global.

  • Tipe data: Boolean.

  • Nilai default: OFF.

  • Nilai valid: [ON|OFF].

Catatan

Saat Anda menonaktifkan fitur native flashback, Anda juga harus mengatur parameter innodb_undo_retention ke 0.

innodb_undo_retention

  • Deskripsi: Periode retensi untuk catatan undo, dalam satuan detik. Catatan undo yang lebih lama dari periode ini tidak dapat dikueri.

  • Format command-line: --innodb-undo-retention=#.

  • Cakupan: parameter global.

  • Tipe data: Integer.

  • Nilai default: 0.

  • Nilai valid: 0 hingga 4294967295.

Catatan
  • Nilai yang lebih besar memungkinkan native flashback mengkueri data lebih jauh ke masa lalu, tetapi juga meningkatkan storage space yang dikonsumsi oleh tablespace undo.

  • Saat parameter innodb_rds_flashback_task_enabled diatur ke OFF, Anda juga harus mengatur parameter ini ke 0.

innodb_undo_space_supremum_size

  • Deskripsi: Ukuran maksimum tablespace undo, dalam MB. Jika penggunaan ruang melebihi nilai ini, catatan undo akan dipurge secara paksa, terlepas dari pengaturan parameter innodb_undo_retention.

  • Format command-line: --innodb-undo-space-supremum-size=#.

  • Cakupan: parameter global.

  • Tipe data: Integer.

  • Nilai default: 10240.

  • Nilai valid: 0 hingga 4294967295.

innodb_undo_space_reserved_size

  • Deskripsi: Ukuran yang dicadangkan, dalam MB, untuk tablespace undo. Saat parameter innodb_undo_retention bernilai bukan nol, ruang ini digunakan untuk menyimpan catatan undo sebanyak mungkin.

  • Format command-line: --innodb-undo-space-reserved-size=#.

  • Cakupan: parameter global.

  • Tipe data: Integer.

  • Nilai default: 0.

  • Nilai valid: 0 hingga 4294967295.

Catatan

Nilai yang besar untuk parameter ini dapat menyebabkan akumulasi catatan undo yang berlebihan, yang berdampak pada performa instans. Kecuali diperlukan, pertahankan parameter ini pada nilai 0.

Contoh

# Dapatkan timestamp saat ini.
MySQL [mytest]> select now();
+---------------------+
| now()               |
+---------------------+
| 2020-10-14 15:44:09 |
+---------------------+
1 row in set (0.00 sec)

# Lihat data.
MySQL [mytest]> select * from mt1;
+----+------+
| id | c1   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
+----+------+
5 rows in set (0.00 sec)

# Jalankan operasi update tanpa klausa WHERE.
MySQL [mytest]> update mt1 set c1 = 100;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0

MySQL [mytest]> select * from mt1;
+----+------+
| id | c1   |
+----+------+
|  1 |  100 |
|  2 |  100 |
|  3 |  100 |
|  4 |  100 |
|  5 |  100 |
+----+------+
5 rows in set (0.00 sec)

# Kueri data historis pada titik waktu yang ditentukan. Kueri mengembalikan hasil yang diharapkan.
MySQL [mytest]> select * from mt1 AS OF timestamp '2020-10-14 15:44:09';
+----+------+
| id | c1   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
+----+------+
5 rows in set (0.00 sec)

# Jika waktu yang ditentukan berada di luar jendela retensi data historis, kueri akan gagal.
MySQL [mytest]> select * from mt1 AS OF timestamp '2020-10-13 14:44:09';
ERROR 7545 (HY000): The snapshot to find is out of range

# Mulai pemulihan data.
MySQL [mytest]> create table mt1_tmp like mt1; # Buat tabel temporary dengan struktur yang sama seperti tabel asli.
Query OK, 0 rows affected (0.03 sec)  
MySQL [mytest]> insert into mt1_tmp
             -> select * from mt1 AS OF
             -> TIMESTAMP '2020-10-14 15:44:09'; # Masukkan data historis dari tabel asli ke tabel temporary. 
Query OK, 5 rows affected (0.01 sec) 
Records: 5  Duplicates: 0  Warnings: 0 
MySQL [mytest]> select * from mt1_tmp; # Verifikasi bahwa data di tabel temporary sudah benar. 
+----+------+
| id | c1   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
+----+------+
5 rows in set (0.00 sec) 
MySQL [mytest]> rename table mt1 to mt1_bak,
             -> mt1_tmp to mt1; # (Sebelum menjalankan operasi ini, hentikan semua operasi baca dan tulis pada tabel.) Ubah nama tabel asli menjadi mt1_bak dan tabel temporary menjadi mt1 untuk menyelesaikan pemulihan data.
Query OK, 0 rows affected (0.02 sec)
MySQL [mytest]> select * from mt1; # Verifikasi data yang telah dipulihkan. 
+----+------+
| id | c1   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
+----+------+ 
5 rows in set (0.01 sec)