• 冻结表
冻结表
FREEZE tbl1[, tbl2, ...]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 列中显示。
最后更新于