全部产品
Search
文档中心

ApsaraDB RDS:Flashback Asli

更新时间:Jul 06, 2025

Topik ini menjelaskan fitur flashback asli, yang memungkinkan Anda mengeksekusi pernyataan SQL untuk menanyakan atau mengembalikan data pada titik waktu tertentu. Dengan cara ini, jika terjadi operasi yang tidak disengaja, Anda dapat memperoleh data historis dengan cepat.

Deskripsi Fitur

Operasi yang tidak disengaja selama pemeliharaan dan pengoperasian (O&M) database dapat berdampak serius pada bisnis Anda. Dalam situasi seperti itu, Anda dapat mengembalikan data dari file log biner. Namun, metode pemulihan ini rumit, memakan waktu, dan rentan terhadap kesalahan. Alternatifnya, Anda dapat mengembalikan data dari file cadangan data, tetapi metode ini membutuhkan sumber daya tambahan dan mungkin memerlukan waktu lama untuk sejumlah besar data.

Fitur flashback asli AliSQL didukung oleh InnoDB. Anda dapat menanyakan atau mengembalikan data historis dalam waktu singkat dengan mengeksekusi pernyataan SQL sederhana, sehingga memastikan stabilitas layanan database Anda.

Prasyarat

  • Instans RDS Anda harus menjalankan MySQL 8.0 pada Edisi Dasar RDS, Edisi Ketersediaan Tinggi RDS, atau Edisi Kluster RDS.

  • Versi mesin minor instans RDS Anda harus 20210930 atau lebih baru. Untuk informasi lebih lanjut tentang cara melihat atau memperbarui versi mesin minor, lihat Perbarui versi mesin minor.

Catatan Penggunaan

  • Fitur flashback asli hanya didukung untuk tabel InnoDB.

  • Fitur flashback asli mengonsumsi ruang tabel undo tambahan. Anda dapat mengonfigurasi parameter innodb_undo_space_supremum_size untuk menentukan ruang tabel undo. Untuk informasi lebih lanjut, lihat Parameter.

  • Fitur flashback asli mengembalikan data pada titik waktu yang paling dekat dengan titik waktu yang ditentukan, tetapi tidak menjamin hasil kueri persis sesuai dengan data pada titik waktu tersebut.

  • Anda tidak dapat menggunakan fitur flashback asli untuk menanyakan atau mengembalikan data dari tabel tempat operasi DDL telah dilakukan. Misalnya, Anda tidak dapat menggunakan fitur ini untuk menanyakan data dari tabel yang dihapus.

Sintaksis

Fitur flashback asli menyediakan sintaksis baru AS OF, yang digunakan untuk menentukan titik waktu ke mana Anda ingin mengembalikan tabel. Contoh berikut menunjukkan sintaksis AS OF:

SELECT ... FROM <Nama tabel>
  AS OF TIMESTAMP <Ekspresi>;

Parameter Ekspresi menentukan titik waktu ke mana Anda ingin mengembalikan tabel 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

Tabel berikut menjelaskan parameter dari fitur flashback asli.

Parameter

Deskripsi

innodb_rds_flashback_task_enabled

  • Parameter ini menentukan apakah akan mengaktifkan fitur flashback asli.

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

  • Rentang parameter: parameter global.

  • Tipe data: BOOLEAN.

  • Nilai default: OFF.

  • Nilai valid: ON dan OFF.

Catatan

Jika Anda ingin menonaktifkan fitur flashback asli, Anda harus menyetel parameter ini ke OFF dan menyetel parameter innodb_undo_retention ke 0.

innodb_undo_retention

  • Parameter ini menentukan periode retensi catatan undo. Catatan undo yang dihasilkan setelah periode retensi berakhir tidak dapat ditanyakan. Unit: detik.

  • Format perintah: --innodb-undo-retention=#.

  • Rentang parameter: parameter global.

  • Tipe data: INTEGER.

  • Nilai default: 0.

  • Nilai valid: 0 hingga 4294967295.

Catatan
  • Nilai yang lebih besar dari parameter ini menunjukkan bahwa fitur flashback asli mendukung kueri data historis yang lebih lama dan jumlah penyimpanan yang lebih besar ditempati oleh ruang tabel undo.

  • Jika Anda menyetel parameter innodb_rds_flashback_task_enabled ke OFF, Anda juga harus menyetel parameter innodb_undo_retention ke 0.

innodb_undo_space_supremum_size

  • Parameter ini menentukan ruang disk maksimum yang dapat ditempati oleh ruang tabel undo. Unit: MB. Saat ukuran maksimum tercapai, catatan undo dipaksa dihapus tanpa memandang nilai parameter innodb_undo_retention.

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

  • Rentang parameter: parameter global.

  • Tipe data: INTEGER.

  • Nilai default: 10240.

  • Nilai valid: 0 hingga 4294967295.

innodb_undo_space_reserved_size

  • Parameter ini menentukan jumlah ruang disk yang dicadangkan untuk ruang tabel undo. Unit: MB. Jika nilai parameter innodb_undo_retention bukan 0, nilai yang lebih besar dari parameter innodb_undo_space_reserved_size menunjukkan bahwa lebih banyak catatan undo dapat dicadangkan di ruang tabel undo.

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

  • Rentang parameter: parameter global.

  • Tipe data: INTEGER.

  • Nilai default: 0.

  • Nilai valid: 0 hingga 4294967295.

Catatan

Jika Anda menyetel parameter ini ke nilai besar, sejumlah besar catatan undo dicadangkan. Akibatnya, performa instans RDS Anda menurun. Kami merekomendasikan agar Anda menyetel parameter ini ke 0.

Contoh

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

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

# Melakukan operasi pembaruan yang tidak mengandung 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)

# Menanyakan data historis pada titik waktu tertentu. Hasil berhasil dikembalikan.
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)

# Menanyakan data historis pada titik waktu yang tidak dalam periode retensi data historis. Pesan kesalahan dikembalikan.
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

# Mengembalikan data tabel.
MySQL [mytest]> create table mt1_tmp like mt1; # Membuat tabel sementara yang menggunakan skema yang sama dengan 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'; # Menulis data historis dari tabel asli ke tabel sementara. 
Query OK, 5 rows affected (0.01 sec) 
Records: 5  Duplicates: 0  Warnings: 0 
MySQL [mytest]> select * from mt1_tmp; # Memverifikasi data di tabel sementara. 
+----+------+
| 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 melakukan operasi ini, Anda harus menghentikan operasi baca dan tulis pada tabel asli.) Mengubah nama tabel asli menjadi mt1_bak dan mengubah nama tabel sementara menjadi nama asli tabel asli untuk menyelesaikan pemulihan data.
Query OK, 0 rows affected (0.02 sec)
MySQL [mytest]> select * from mt1; # Memverifikasi bahwa data benar setelah proses pemulihan. 
+----+------+
| id | c1   |
+----+------+
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
|  4 |    4 |
|  5 |    5 |
+----+------+ 
5 rows in set (0.01 sec)