tencent cloud

TencentDB for MySQL

フラッシュバッククエリー

PDF
フォーカスモード
フォントサイズ
最終更新日: 2026-03-11 10:14:17

機能説明

データベースの運用保守中に誤動作が発生することがあります、このような誤動作は、業務に重大な影響を及ぼす可能性があります。誤動作によって業務に影響が及んだ場合、一般的なリカバリ手段としては、ロールバックやクローン作成などがありますが、データの変更が少ない場合や、緊急の障害修復では、エラーが発生しやすく時間がかかり、また、データ量が多い場合にはリカバリ時間を把握できません。TXSQLチームは、Innodbエンジン上でフラッシュバッククエリー機能を設計・実装しました。簡単なSQL文だけで誤動作前の履歴データを照会することができます。特定のSQL構文で特定の時点のデータを照会することで、大量のデータ照会と回復時間を節約し、誤動作後のデータを迅速に復元し、業務の迅速な再開を保証します。

対応バージョン

カーネルバージョン MySQL 5.7 20230601以降です。
カーネルバージョンはMySQL 8.0 20220331以降です。
カーネルマイナーバージョンの確認またはアップグレード方法については、カーネルマイナーバージョンのアップグレードを参照してください。

適用シーン

フラッシュバック照会機能は、データベース運用保守プロセス中に誤操作が発生した後、過去データを迅速に照会するために使用されます。 この機能を使用する際には、以下の点に注意が必要です。
Innodb物理テーブルのみサポートされ、viewやその他のエンジンはサポートされず、last_insert_id()など実際の列に対応しない関数もサポートされません。
秒単位のフラッシュバック照会のみサポートされ、100%正確であることを保証しません。1秒以内に複数の変更があった場合、いずれかが照会される可能性があります。
フラッシュバック照会は、主キー(または GEN_CLUST_INDEX)のみサポートされます。
プリペアドステートメントおよびストアドプロシージャ内での使用はサポートされていません。
DDLはサポートされていません。テーブルに対してDDL(例:truncate table、このような操作はごみ箱からの復元を推奨します)を実行した場合、フラッシュバック照会で得られる結果が期待通りでない可能性があります。
同一ステートメント内で同一テーブルに対して複数のフラッシュバック照会時刻が指定された場合、現在の照会時刻から最も離れた時刻が選択されます。
マスターインスタンスとスレーブインスタンス間に時間差が存在するため、同じ時間を指定してフラッシュバック照会を行っても、得られる結果が異なる可能性があります。
フラッシュバック照会を有効化すると、undoログのクリーンアップが遅延し、メモリ使用量が増加します。特にアクセスが頻繁なインスタンスでは、Innodb_backquery_windowを大きすぎる値(900から1800の範囲内での設定を推奨)に設定することは避けてください。
データベースインスタンスが再起動またはクラッシュした場合、再起動またはクラッシュ前の履歴情報を照会できなくなります。指定された時間はサポート範囲内である必要があります(サポート範囲はステータス変数 Innodb_backquery_up_time および Innodb_backquery_low_time で確認でき、show status like '%backquery%'を実行してください)。

使用説明

フラッシュバック照会では新たなAS OF構文が提供されています。パラメータ設定でInnodb_backquery_enableパラメータをONに設定することでフラッシュバック照会機能が有効化され、特定の構文を使用して指定時点のデータを照会できます。構文は以下の通りです:
SELECT ... FROM <テーブル名>
AS OF TIMESTAMP <時刻>;
指定時刻の照会参考例
MySQL [test]> create table t1(id int,c1 int) engine=innodb;
Query OK, 0 rows affected (0.06 sec)

MySQL [test]> insert into t1 values(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0

MySQL [test]> select now();
+---------------------+
| now() |
+---------------------+
| 2024-10-18 16:01:01 |
+---------------------+
1 row in set (0.00 sec)

MySQL [test]> delete from t1 where id=4;
Query OK, 1 row affected (0.00 sec)

MySQL [test]> select * from t1;
+------+------+
| id | c1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set (0.00 sec)

MySQL [test]> select * from t1 as of timestamp '2024-10-18 16:01:01';
+------+------+
| id | c1 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+------+------+
4 rows in set (0.00 sec)
履歴データによるテーブル作成参考例
create table t3 select * from t1 as of timestamp '2024-10-18 16:01:01';
テーブルへの履歴データ挿入参考例
insert into t4 select * from t1 as of timestamp '2024-10-18 16:01:01';

パラメータ説明

以下の表はフラッシュバック照会機能で設定可能なパラメータの説明を記載しています。
パラメータ名
パラメータ範囲
タイプ
デフォルト値
設定可能範囲
再起動の必要があるかどうか。
説明
Innodb_backquery_enable
グローバルパラメータ
Boolean
OFF
ON\\OFF
いいえ
フラッシュバック照会機能の有効化設定。
Innodb_backquery_window
グローバルパラメータ
Integer
900
1 - 86400
いいえ
フラッシュバック照会がサポートする時間範囲(単位:秒)です。このパラメータの値が大きいほど、フラッシュバック照会がサポートする履歴データの照会可能時間が長くなりますが、同時にundoテーブルスペースが占有するストレージ容量も増加します。
Innodb_backquery_history_limit
グローバルパラメータ
Integer
8000000
1 - 9223372036854476000
いいえ
undo履歴リストの長さ制限を超えると、Innodb_backquery_windowのトリガーによるpurgeが無視され、履歴リストの長さが設定値を下回るまで実行されません。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック