Clickhouse:使用 ALTER TABLE FREEZE PARTITION 时最新分区的备份/恢复不一致

Clickhouse:使用 ALTER TABLE FREEZE PARTITION 时最新分区的备份/恢复不一致

我正在尝试建立一个 Clickhouse 数据的备份和恢复流程,但是当我恢复数据并对其运行查询时,最新分区似乎存在差异。

我目前正在使用 Clickhouse 服务器版本 1.1.54245 的单个实例,而不是集群。由于不兼容,我尚无法升级到更高版本。

以下是我针对 ReplacingMergeTree 表的流程:

  1. 删除影子目录的内容,这样我们就不会从备份过程的早期运行中获取影子文件。

  2. 首先,执行一个 select 语句,稍后将使用它来验证恢复是否成功:

    • 从 mytable 中选择发生日期,计数(*) 按发生日期分组 按发生日期排序
  3. 对于每个分区,

    • 更改表 mytable 冻结分区...
  4. 收集 shadow/[0-9]* 目录中的文件并备份。

  5. 收集metadata/mydb.sql和metadata/mydb/*文件并备份。

  6. 在另一台机器上,使用备份中的数据和元数据文件启动新的 Clickhouse 服务器。

  7. 执行与步骤2相同的选择语句,检查是否存在差异。

问题在于,对于我们的一个表,查询在步骤 7 中对于结果集中的最后 2 个日期返回的计数太低。

示例 1:我在 2017-10-02 进行了备份和恢复,检查结果如下:从 2010-01-01 到 2017-09-30 的所有日期都没有问题。但是 2017-10-01:备份前有 99641。恢复后有 68432 和 2017-10-02:备份前有 37790。恢复后有 1330

示例 2:我于 2017-10-03 进行了备份和恢复。没有差异。

示例 3:我在 2017-10-03 进行了第二次备份和恢复。2010-01-01 至 2017-09-30 的所有日期均正常。恢复后的查询结果中完全缺失 2017-10-01。恢复后的查询结果中完全缺失 2017-10-02。2017-10-03 部分缺失:备份前有 30716 个。恢复后有 20526 个

当我执行 FREEZE 操作时显示一条错误消息:

Unknown error field: Poco::Exception. Code: 1000
Unknown error field: e.code() = 2
Unknown error field: e.displayText() = File not found: /var/lib/clickhouse/data/mydb/events/20171003_20171003_568801_568801_0
{ Error: Poco::Exception. Code: 1000, e.code() = 2, e.displayText() = File not found: /var/lib/clickhouse/data/mydb/events/20171003_20171003_568801_568801_0, e.what() = File not found

at parseError (/code/node_modules/@apla/clickhouse/src/parse-error.js:2:15)
at errorHandler (/code/node_modules/@apla/clickhouse/src/clickhouse.js:26:13)
at IncomingMessage.<anonymous> (/code/node_modules/@apla/clickhouse/src/clickhouse.js:94:11)
at emitNone (events.js:110:20)
at IncomingMessage.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1059:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9) type: 'File not found' }

此错误是针对我遇到差异问题的分区而言的。

我做错了什么吗?你能给我一些建议吗?

答案1

相关内容