HotDB---暂留被DROP的表
考虑到DROP TABLE语句在实际生产或线上环境执行时的较高风险,HotDB Server支持保留被DROP的表一段时间后再删除。
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name] …[RESTRICT | CASCADE]
可通过修改server.xml中的dropTableRetentionTime参数或在管理平台配置菜单下的计算节点参数配置中添加参数“被删除表保留时长(小时)”。
<propertyname=“dropTableRetentionTime”>0
dropTableRetentionTime参数默认为0,表示不保留被DROP的表,DROP TABLE立即删除表;dropTableRetentionTime大于0时,单位以小时计算,保留被DROP的表到设置时长,超过设置时长后自动删除被保留的表。
计算节点暂不提供还原被删除的表的直接命令,但是用户可以在存储节点通过RENAME的方式还原被删除的表。因直接在存储节点上进行操作,故此操作存在风险,请谨慎使用。风险包括还原后数据路由可能与实际路由不同、原有的外健和触发器被删除、父子表关系不存在等,详细风险参考还原注意事项。
当该功能开启时,以dropTableRetentionTime=24为例,将保留被DROP的表,24小时后删除被保留的表。若想要还原被DROP的表,首先查询计算节点配置库中的hotdb_dropped_table_log,查看被DROP的表的映射关系。例如:
mysql> select * from hotdb_dropped_table_log;
±------------±-----------±---------------------±------------------------------+
| table_name| datanodes | drop_time | renamed_table_name |
±------------±-----------±---------------------±------------------------------+
| TABLE25 | 11 | 2019-03-26 17:18:07 | HOTDB_TEMP_33_20190326171807 |
| TABLE30 | 11 | 2019-03-26 17:18:13 | HOTDB_TEMP_34_20190326171812 |
±------------±-----------±---------------------±------------------------------+
2 rows in set (0.00 sec)
其中,renamed_table_name即为保留被DROP的表的临时表,可以通过RENAME该临时表来还原数据。
RENAME TABLE tbl_name TO new_tbl_name
还原操作可以在对应的存储节点下分别RENAME临时表,也可以直接在计算节点下通过HINT语句RENAME临时表。使用HINT语句的操作说明及注意事项请参考 此文档的HINT章节。
3.1还原注意事项:
还原时需要注意以下要点:
Ø 通过管理平台配置后创建的表,可以直接RENAME成原表名。通过自动建表功能创建的表,DROP TABLE时不保留表配置,因此不能直接RENAME成原表名。
Ø 还原自动建表创建的表可以通过在管理平台上添加配置后RENAME成该表表名。也就是说,还原操作允许通过RENAME表名,将被删除的表还原成任何在管理平台上已配置但未定义的表。
Ø 若被删除的表引用的分片规则发生修改,或配置不同的分片规则,还原后,数据路由会与删除前一致,即实际数据路由将与配置的路由不匹配。建议按照原来的分片规则配置还原,以防出现数据丢失或不一致的问题。
Ø 若被删除的表上存在外键或触发器,DROP TABLE时将会在临时表中删除外键与触发器。有外键约束的表因外键被删除,还原后没有相关约束,以及有可能表内数据已经不再满足相关约束。
Ø RENAME临时表的还原操作需要动态加载(reload)后才会生效。当前计算节点的动态加载功能在配置库有变更的情况下才生效,所以若除RENAME操作,配置库无其他变更,需要进行一些变更后,执行动态加载才会生效,生效后可查看到还原的表。
来源 https://www.modb.pro/db/88046
相关文章