由于DDL语句无法回滚,如果误删除了表(例如DROP TABLE),可能会导致数据丢失。PolarDB提供了表回收站的功能,删除的表会被临时转移到表回收站,因此您可以从表回收站恢复误删的表。
前提条件
- 仅当集群版本为PolarDB MySQL引擎8.0版本,且内核小版本为8.0.1.1.2及以上时,才支持表回收站功能。
- 请确保误删前已开启表回收站功能:设置集群参数recycle_bin为ON。
- 请确保误删表的时间点在表回收站内数据的最长保留周期内。可设置集群参数recycle_bin_retention(单位:秒),定义该最长保留周期。
操作步骤
- 执行如下语句,查看回收站中所有临时保存的表。
CALL DBMS_RECYCLE.show_tables()
示例:
使用如下语句进行查看:
mysql> CALL DBMS_RECYCLE.show_tables();
返回结果如下:
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
| SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
| __recycle_bin__ | __innodb_1063 | product_db | t1 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1064 | product_db | t2 | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1065 | product_db | parent | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
| __recycle_bin__ | __innodb_1066 | product_db | child | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
+-----------------+---------------+---------------+--------------+---------------------+---------------------+
4 rows in set (0.00 sec)
返回结果中的参数说明如下:
参数 |
说明 |
SCHEMA |
回收站的Schema。 |
TABLE |
进入回收站后的表名。 |
ORIGIN_SCHEMA |
原始表的Schema。 |
ORIGIN_TABLE |
原始表的表名。 |
RECYCLED_TIME |
回收时间。 |
PURGE_TIME |
预计在回收站中被清理的时间。 |
- 执行如下语句,快速恢复回收站内的某张表。
CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');
说明 PolarDB MySQL引擎 8.0集群版的Revision version为8.0.1.1.12或以上才支持通过
restore_table
命令,快速恢复回收站内的表。您可以参见
查询版本号确认集群版本。
该语句中的参数说明如下:
参数 |
说明 |
RECYCLE_TABLE |
需要恢复的表在回收站内的表名。
|
DEST_DB |
为恢复后的表指定目标数据库。 |
DEST_TABLE |
为恢复后的表指定新的表名。 |
示例:
mysql> call dbms_recycle.restore_table('__innodb_1063','testDB','testTable');