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

我试图build立一个备份和恢复Clickhouse数据的过程,但是当我恢复数据并运行查询时,最近的分区似乎有差异。

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

这是我的一个replaceMergeTree表的过程:

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

  2. 首先,执行一个select语句,稍后将使用它来validation还原是否成功:

    • select发生的date,count(*)FROM mytable组发出的事件发生dateorder_at_date
  3. 对于每个分区,

    • ALTER TABLE mytable FREEZE PARTITION …
  4. 收集shadow / [0-9] *目录中的文件并将其备份。

  5. 收集元数据/ mydb.sql和元数据/ mydb / *文件并备份。

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

  7. 执行与步骤2中相同的select语句来检查是否有任何差异。

问题是对于其中一个表,查询返回结果集中最后2个date的步骤7中的计数太低。

示例1:我在2017-10-02做了备份和恢复,这里是检查的结果:从2010-01-01到2017-09-30的所有date都很好。 但是2017-10-01:备份之前已经有99641了。还原之后有68432和2017-10-02:备份之前有37790.还原之后有1330

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

示例3:我在2017-10-03进行了第二次备份和恢复。 从2010-01-01到2017-09-30的所有date都很好。 恢复后查询结果完全丢失了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' } 

这个错误是为我有差异问题的分区。

难道我做错了什么? 你能提供什么build议吗?