フラッシュバックデータベース
TiDB v6.4.0 ではFLASHBACK DATABASE構文が導入されています。3 FLASHBACK DATABASE使用すると、ガベージ コレクション (GC) の有効期間内にDROPステートメントによって削除されたデータベースとそのデータを復元できます。
tidb_gc_life_timeシステム変数を設定することで、履歴データの保持時間を設定できます。デフォルト値は10m0sです。次の SQL 文を使用して、現在のsafePoint 、つまり GC が実行された時点を照会できます。
SELECT * FROM mysql.tidb WHERE variable_name = 'tikv_gc_safe_point';
tikv_gc_safe_point回目以降にDROPでデータベースが削除されていれば、 FLASHBACK DATABASE使用してデータベースを復元できます。
構文
FLASHBACK DATABASE DBName [TO newDBName]
概要
- FlashbackDatabaseStmt
- FlashbackToNewName
FlashbackDatabaseStmt ::=
'FLASHBACK' DatabaseSym DBName FlashbackToNewName
FlashbackToNewName ::=
( 'TO' Identifier )?
注記
tikv_gc_safe_point回目より前にデータベースが削除された場合、FLASHBACK DATABASEステートメントを使用してデータを復元することはできません。FLASHBACK DATABASEステートメントはERROR 1105 (HY000): Can't find dropped database 'test' in GC safe point 2022-11-06 16:10:10 +0800 CSTと同様のエラーを返します。FLASHBACK DATABASEステートメントを使用して同じデータベースを複数回復元することはできませんFLASHBACK DATABASEで復元されたデータベースは元のデータベースと同じスキーマ ID を持つため、同じデータベースを複数回復元するとスキーマ ID が重複します。TiDB では、データベース スキーマ ID はグローバルに一意である必要があります。TiDB Binlogが有効になっている場合、
FLASHBACK DATABASE使用するときは次の点に注意してください。- ダウンストリームセカンダリデータベースは
FLASHBACK DATABASEサポートする必要があります。 - セカンダリ データベースの GC ライフタイムは、プライマリ データベースの GC ライフタイムよりも長くする必要があります。そうしないと、アップストリームとダウンストリーム間のレイテンシーにより、ダウンストリームでのデータ復元が失敗する可能性があります。
- TiDB Binlogレプリケーションでエラーが発生した場合は、TiDB Binlog内のデータベースをフィルター処理し、このデータベースの完全なデータを手動でインポートする必要があります。
- ダウンストリームセカンダリデータベースは
例
DROPによって削除されたtestデータベースを復元します。DROP DATABASE test;FLASHBACK DATABASE test;DROPで削除されたtestデータベースを復元し、名前をtest1に変更します。DROP DATABASE test;FLASHBACK DATABASE test TO test1;
MySQL 互換性
このステートメントは、MySQL 構文に対する TiDB 拡張です。