データベースの運用保守中に誤動作が発生することがあります、このような誤動作は、業務に重大な影響を及ぼす可能性があります。誤動作によって業務に影響が及んだ場合、一般的なリカバリ手段としては、ロールバックやクローン作成などがありますが、データの変更が少ない場合や、緊急の障害修復では、エラーが発生しやすく時間がかかり、また、データ量が多い場合にはリカバリ時間を把握できません。
TXSQLチームは、Innodbエンジン上でフラッシュバッククエリー機能を設計・実装しました。簡単なSQL文だけで誤動作前の履歴データを照会することができます。特定のSQL構文で特定の時点のデータを照会することで、大量のデータ照会と回復時間を節約し、誤動作後のデータを迅速に復元し、業務の迅速な再開を保証します。
カーネルマイナーバージョンのアップデートについて、カーネルマイナーバージョンのアップデートをご参照ください。
フラッシュバッククエリー機能はデータベースの運用保守プロセスの誤動作後、履歴データを迅速にクエリーするために使用されます。
この機能を使用する場合は、次のいくつかの点に注意してください:
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() |
+---------------------+
| 2022-02-17 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 '2022-02-17 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 '2022-02-17 16:01:01';
テーブルに履歴データを挿入する例
insert into t4 select * from t1 as of timestamp '2022-02-17 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トリガが無視されます。 |
この記事はお役に立ちましたか?