高级DBA教你解决clickhouse数据库数据文件破坏磁盘碎片解决方法实战
一、事故问题描述
clickhouse数据库宕机了,怎么起也起不来!反复重启都不行!报错如下!
日志默认路径:
/var/log/clickhouse-server
clickhouse-server.err.log clickhouse-server.log stderr.log stdout.log
查看日志核心内容如下:
(version 22.2.2.1)
2024.06.19 17:17:37.929590 [ 25180 ] {} <Error> system.metric_log (c27957d5-36e6-4fec-8772-3eca2f8003b5): Detaching broken part /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_54773_54773_0 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
2024.06.19 17:17:37.930283 [ 25196 ] {} <Error> system.metric_log (c27957d5-36e6-4fec-8772-3eca2f8003b5): Detaching broken part /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_51101_54766_697 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
2024.06.19 17:17:37.932033 [ 25196 ] {} <Error> auto DB::MergeTreeData::loadDataPartsFromDisk(DB::MergeTreeData::DataPartsVector &, DB::MergeTreeData::DataPartsVector &, ThreadPool &, size_t, std::queue<std::vector<std::pair<String, DiskPtr>>> &, bool, const DB::MergeTreeSettingsPtr &)::(anonymous class)::operator()(const DB::String &, const DB::DiskPtr &) const: Code: 27. DB::ParsingException: Cannot parse input: expected 'columns format version: 1\n' at end of stream. (CANNOT_PARSE_INPUT_ASSERTION_FAILED), Stack trace (when copying this message, always include the lines below):
0. DB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, bool) @ 0xaebed1a in /usr/bin/clickhouse
1. DB::throwAtAssertionFailed(char const*, DB::ReadBuffer&) @ 0xaf11b8d in /usr/bin/clickhouse
2. DB::NamesAndTypesList::readText(DB::ReadBuffer&) @ 0x14173d4c in /usr/bin/clickhouse
3. DB::IMergeTreeDataPart::loadColumns(bool) @ 0x153f6b50 in /usr/bin/clickhouse
4. DB::IMergeTreeDataPart::loadColumnsChecksumsIndexes(bool, bool) @ 0x153f5eea in /usr/bin/clickhouse
5. ? @ 0x154c9c42 in /usr/bin/clickhouse
6. ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::__1::__list_iterator<ThreadFromGlobalPool, void*>) @ 0xaf6546a in /usr/bin/clickhouse
7. ThreadFromGlobalPool::ThreadFromGlobalPool<void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()>(void&&, void ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::__1::function<void ()>, int, std::__1::optional<unsigned long>)::'lambda0'()&&...)::'lambda'()::operator()() @ 0xaf674a4 in /usr/bin/clickhouse
8. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0xaf62837 in /usr/bin/clickhouse
9. ? @ 0xaf662fd in /usr/bin/clickhouse
10. ? @ 0x8f2b in /usr/lib64/libpthread-2.28.so
11. clone @ 0xf84af in /usr/lib64/libc-2.28.so
(version 22.2.2.1)
2024.06.19 17:17:37.929590 [ 25180 ] {} system.metric_log (c27957d5-36e6-4fec-8772-3eca2f8003b5): Detaching broken part /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_54773_54773_0 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
2024.06.19 17:17:37.930283 [ 25196 ] {} system.metric_log (c27957d5-36e6-4fec-8772-3eca2f8003b5): Detaching broken part /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_51101_54766_697 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
2024.06.19 17:17:37.930283 [ 25196 ] {} system.metric_log (c27957d5-36e6-4fec-8772-3eca2f8003b5): Detaching broken part /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_51101_54766_697 (size: 0.00 B). If it happened after update, it is likely because of backward incompability. You need to resolve this manually
这段日志信息显示了在 2024 年 6 月 19 日 17 时 17 分 37 秒左右,ClickHouse 系统中出现了错误。
具体来说,系统的 metric_log
报告了正在分离损坏的部分,分别是 /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_54773_54773_0
和 /var/lib/clickhouse/store/c27/c27957d5-36e6-4fec-8772-3eca2f8003b5/202406_51101_54766_697
,并且这些部分的大小为 0 字节。日志提示如果这种情况是在更新后发生的,很可能是由于向后不兼容导致的,需要手动解决这个问题。
这意味着可能在系统的某些操作或更新后,相关的数据部分出现了损坏或不兼容的情况,需要进一步排查和处理,以确保系统的正常运行和数据的完整性。例如,可能需要检查最近的更新操作是否正确,或者查看相关配置是否存在冲突等。
/var/lib/clickhouse/store/ #clickhouse默认的数据存储路径
文件目录破坏了,按照路径文件夹怎么删也删不掉!rm -rf 整个目录都不好使!
把clickhouse删掉软件重装也不好使!报错都一样!
二、解决方法更换clickhouse的默认存储路径,然后数据重新同步!
clickhouse默认存储路径是根目录的
/var/lib/clickhouse
有些时间长了,应用起来会导致根目录爆满了,笔者讲一讲怎么迁移clickhouse的存储路径
步骤一、确定clickhouse默认存储路径
cd /etc/clickhouse-server
vi config.xml
步骤二、关闭clickhouse服务
clickhouse stop
步骤三、迁移数据库数据文件路径拷贝
cd /var/lib/ #进到原始路径
cp -r clickhouse /home/ #执行拷贝
等待复制
复制完成之后,
du -h /home/clickhouse/
查看文件大小是否合适,合适代表复制成功!
可以尝试忽略上述错误那个路径的文件复制到新目录尝试启动!
如果还是老问题,删掉重建创建新的CK数据存储路径,数据重新同步!
mkdir /home/clickhouse/
步骤四、修改配置文件路径至新的路径,并修改文件归属
cd /etc/clickhouse-server
vi config.xml
改为新路径:/home/clickhouse
改完之后,修改文件归属!!!
修改权限把用户组指定为clickhouse用户组
cd /home
chown -R clickhouse:clickhouse clickhouse
然后保存配置文件!
步骤五、启动clickhouse服务
clickhouse start
执行SQL验证
SELECT * FROM system.databases
三、思路总结
clickhouse文件破坏无法启动,无法操作,那就切换配置新的clickhouse存放路径!西方不亮,东方亮!然后clickhouse重新同步!
ClickHouse 被认为是 OLAP 数据库主要有以下原因:
- 强大的分析能力:它能够高效地处理大规模数据的复杂分析查询,支持各种聚合函数、多表连接等操作,满足对数据进行深入挖掘和分析的需求。
- 列式存储:数据按列存储,这使得在分析场景下,对于特定列的数据读取和计算非常高效,尤其适合聚合类操作。
- 高数据压缩比:可以极大地减少数据存储空间,提高数据读取效率,这对于处理海量数据的分析非常关键。
- 快速的查询执行速度:通过优化的数据结构和算法,能够在短时间内返回复杂查询的结果,实现快速的数据分析。
- 支持大规模数据量:可以轻松应对 TB 甚至 PB 级别的数据量,适应现代企业数据规模不断增长的需求。
- 多维分析特性:允许从不同维度和层次对数据进行灵活的分析和切片,符合 OLAP 对多维数据分析的要求。
OLAP 即联机分析处理(Online Analytical Processing)
它是一种数据处理技术,主要用于支持复杂的分析操作,允许用户对大规模的数据进行多角度、快速、交互性的查询和分析。OLAP 系统通常具有以下特点:
- 多维数据分析:可以从多个维度(如时间、地区、产品等)对数据进行观察和分析。
- 快速响应:能够在较短时间内返回分析结果,以支持实时决策。
- 数据汇总和聚合:可以方便地进行数据的汇总、计算等操作。
- 交互性:允许用户灵活地改变分析角度和条件。
OLAP 在商业智能、数据分析等领域有着广泛应用,帮助企业决策者更好地理解数据、发现趋势和规律,从而做出更有效的决策。例如,在销售数据分析中,可以通过 OLAP 从不同产品、不同时间段、不同地区等维度分析销售业绩。
四、笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!