• 冻结表
冻结表
FREEZE
命令准备一个实时/普通表进行安全的 备份。具体步骤包括:
停用表的压缩功能。如果表正在被压缩,
FREEZE
将优雅地中断它。将当前的 RAM 块转移到磁盘块。
刷新属性。
禁用可能修改磁盘文件的隐式操作。
增加表的锁定计数器。
显示与表相关的实际文件列表。
如果表已被冻结(锁定),FREEZE
将:
增加表的锁定计数器。
显示与表相关的实际文件列表。
内置工具 manticore-backup 使用 FREEZE
来确保数据一致性。您可以在创建自己的备份解决方案或需要冻结表时执行相同操作,只需遵循以下步骤:
FREEZE
表(或多个表)。捕获
FREEZE
命令的输出并备份指定的文件。一旦完成,执行
UNFREEZE
命令。
当表被冻结时,您不能执行 UPDATE
查询;它们会因“索引现在被锁定,请稍后再试”的错误消息而失败。
同时,DELETE
和 REPLACE
查询在表被冻结时也有一些限制:
如果
DELETE
影响当前 RAM 块中的文档——这是允许的。如果
DELETE
影响磁盘块中的文档但已被先前删除——这是允许的。如果
DELETE
会改变实际的磁盘块——它将等待直到表解冻。
手动 FLUSH
冻结表的 RAM 块将报告“成功”,但不会实际保存任何数据。
冻结表的 DROP
/TRUNCATE
操作是允许的,因为这些操作不是隐式的。我们假设如果您要截断或删除表,则不需要备份它,因此它不应该在最初被冻结。
在冻结的表中支持 INSERT
,但有限制:新数据将按常规存储在 RAM 中,直到达到 rt_mem_limit
;然后,新插入将等待表解冻。
如果您在冻结表的情况下关闭守护进程,它将表现得像经历了脏关闭(例如,kill -9
):新插入的数据将不会被保存到磁盘上的 RAM 块,并且在重新启动时将从二进制日志(如果有的话)恢复,或丢失(如果禁用了二进制日志)。
解冻表
UNFREEZE
命令减少表的锁定计数器,如果计数器达到零,则重新激活之前被阻止的操作并恢复内部压缩服务。所有等待表解冻的操作也将恢复并正常完成。
检查表的锁定状态
可以使用SHOW table_name STATUS
来检查表是否被冻结。
锁定计数器显示在表的状态下的 locked
列中。零值表示表未被冻结,而非零值表示活动锁的数量。每个显式的 FREEZE
命令和隐式锁定(如当表是集群的一部分且复制例程选择它作为副本的捐赠者时)都会增加计数器。每个 UNFREEZE
命令都会减少计数器,最终降到零。
SHOW LOCKS
锁定的表也可以通过 SHOW LOCKS
命令显示。锁定计数器在 Additional Info
列中显示。
最后更新于