フラッシュバック データベース
TiDB v6.4.0 ではFLASHBACK DATABASE
構文が導入されています。 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 拡張です。