高级DBA教你解决clickhouse数据库数据文件破坏磁盘碎片解决方法实战

高级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 数据库主要有以下原因:

  1. 强大的分析能力:它能够高效地处理大规模数据的复杂分析查询,支持各种聚合函数、多表连接等操作,满足对数据进行深入挖掘和分析的需求。
  2. 列式存储:数据按列存储,这使得在分析场景下,对于特定列的数据读取和计算非常高效,尤其适合聚合类操作。
  3. 高数据压缩比:可以极大地减少数据存储空间,提高数据读取效率,这对于处理海量数据的分析非常关键。
  4. 快速的查询执行速度:通过优化的数据结构和算法,能够在短时间内返回复杂查询的结果,实现快速的数据分析。
  5. 支持大规模数据量:可以轻松应对 TB 甚至 PB 级别的数据量,适应现代企业数据规模不断增长的需求。
  6. 多维分析特性:允许从不同维度和层次对数据进行灵活的分析和切片,符合 OLAP 对多维数据分析的要求。

OLAP 即联机分析处理(Online Analytical Processing)

它是一种数据处理技术,主要用于支持复杂的分析操作,允许用户对大规模的数据进行多角度、快速、交互性的查询和分析。OLAP 系统通常具有以下特点:

  • 多维数据分析:可以从多个维度(如时间、地区、产品等)对数据进行观察和分析。
  • 快速响应:能够在较短时间内返回分析结果,以支持实时决策。
  • 数据汇总和聚合:可以方便地进行数据的汇总、计算等操作。
  • 交互性:允许用户灵活地改变分析角度和条件。

OLAP 在商业智能、数据分析等领域有着广泛应用,帮助企业决策者更好地理解数据、发现趋势和规律,从而做出更有效的决策。例如,在销售数据分析中,可以通过 OLAP 从不同产品、不同时间段、不同地区等维度分析销售业绩。

四、笔者简介

国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
dba数据库管理员)是负责管理和维护数据库系统的专业人士。他们的主要职责是确保数据库的安全性、稳定性和可靠性。下面是一个关于dba数据库管理员的完整程。 1. 学习数据库技术:作为一个dba,你需要掌握数据库的基本技术和概念。这包括数据库的设计原理、结构和组成部分,以及数据库管理系统(DBMS)的功能和特点。 2. 学习SQL语言:SQL(结构化查询语言)是数据库中常用的查询语言。作为dba,你需要熟悉SQL的基本语法和常见的查询操作,以便能够有效地管理和操作数据库。 3. 数据库安装和配置:dba需要学会安装和配置数据库管理系统。这包括选择适当的DBMS软件、配置数据库服务器、设置安全权限和访问控制,以及优化数据库性能。 4. 数据库备份和恢复:作为dba,你需要定期备份数据库以防止数据丢失。你还需要学会如何在数据库发生故障时进行恢复操作,以确保数据完整性和正确性。 5. 性能优化和调优:为了提高数据库的性能和响应速度,dba需要学会分析数据库的瓶颈和性能问题,并采取相应的措施进行优化和调优。 6. 安全管理和权限控制:dba需要确保数据库的安全性。他们需要创建和管理用户账户,并设置适当的权限和访问控制,以防止未经授权的用户对数据库进行操作。 7. 监控和故障排除:dba需要实时监控数据库的运行状况,及时发现和解决故障和问题。他们需要使用监控工具来跟踪数据库的性能指标,并采取必要的措施进行故障排除。 8. 持续学习和更新:dba需要不断学习和更新自己的知识和技能,以跟上数据库技术的发展。他们可以参加培训课程、参与专业社区和阅读相关文献来不断提升自己的能力。 总之,dba数据库管理员是一个专业的角色,需要掌握数据库技术、SQL语言和数据库管理技能。通过学习和实践,dba可以成为数据库领域的专家,并负责管理和维护企业的数据库系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术很渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值