admin管理员组

文章数量:1531328

Clickhouse 数据恢复

  • 现象
  • 1. 数据文件处理
    • 1.1 备份原始数据文件
    • 1.2. 备份元数据并恢复数据库元数据
    • 1.3 数据库恢复在线
  • 2. 数据恢复
    • 2.1 去除损坏的数据文件,并把数据复制一份到数据目录下
    • 2.2 表创建于数据恢复。
    • 2.3 重启clickhouse-server。
  • 4. 查看数据恢复情况
  • 5. 备注

现象

clickhouse 数据库数据块【硬件损坏导致】,数据库离线,元数据损坏,存储的数据文件[块]损坏。

1. 数据文件处理

1.1 备份原始数据文件

1. 重命名原始数据文件目录,并移动到备份目录下
mkdir -p  /data/clickhouse/data_bak
2. 切换到数据目录
cd /data/clickhouse/data
mv shuzhi_dpi  /data/clickhouse/data_bak/shuzhi_dpi_bak_original 【建议mv ,可以保证所有数据包括异常数据也能同步过来】

1.2. 备份元数据并恢复数据库元数据

1. 重命名元数据文件目录,并移动到备份目录下
mkdir -p  /data/clickhouse/metadata_bak
2. 切换到元数据目录下
cd /data/clickhouse/metadata
3. 把原始sql文件移到备份目录
mv shuzhi_dpi /data/clickhouse/metadata_bak/shuzhi_dpi_metadata_bak_original
3. 创建数据库元数据目录
mkdir -p shuzhi_dpi

1.3 数据库恢复在线

Systemctl restart clickhouse-server , shuzhi_dpi 数据库恢复在线。

2. 数据恢复

2.1 去除损坏的数据文件,并把数据复制一份到数据目录下

1. 把原始数据 cp 一份数据到数据目录【/data/clickhouse/data】下,可以去除异常的文件
	cp -r /data/clickhouse/data_bak/shuzhi_dpi_bak_original /data/clickhouse/data/shuzhi_dpi
2. 遍历每个目录删除	format_version.txt 文件。

备注:存在 粉红色 的文件,重启会报错,数据库无法连接,删除再重启server即可。

2.2 表创建于数据恢复。

数据恢复脚本:

#/bin/bash

# sql 元数据备份目录
cd /data/clickhouse/metadata_bak/shuzhi_dpi_metadata_bak_original

filesql=`ls`

for sql in $filesql 
do
	# 遍历执行sql
	clickhouse-client -u default --password ******* -h 127.0.0.1 -d shuzhi_dpi --multiquery < $sql
done

2.3 重启clickhouse-server。

Systemctl restart clickhouse-server

4. 查看数据恢复情况

连接clickhouse  
clickhouse-client -h 127.0.0.1 -u default --password password
查看数据恢复情况:
use shuzhi_dpi;
Show tables;
# 查看表数据
Select * from tablename;

5. 备注

  1. sql 元数据中可能会存在乱码的sql文件,可以使用python等语言做过滤或者shell脚本等语言过滤;数据文件同理。
  2. 当数据目录 /data/clickhouse/data/shuzhi_dpi/detached 下存在可用的离线数据文件时,不能 create table table() 语句,要使用 ATTACH table table(),把离线的数据附加到表中。【/data/clickhouse/data/shuzhi_dpi/detached 下的文件是被分离的文件】

本文标签: 数据恢复硬件文件数据clickhouse