clickhouse-23.8 数据丢失后如何恢复

前提背景:

  • clickhouse-23.8
  • 之前读写都正常的复制表
  • 复制表所在的两个机器:172.0.0.1 和 172.0.0.2
  • 磁盘挂载
    • /ssd1 固态硬盘, 放热存数据
    • /data1 机械硬盘, 放冷存数据
  • 元数据所在目录(默认数据目录): /ssd1/ch_default
  • 热数据所在目录: /ssd1/ch_23_8
  • 冷数据所在目录: /data1/ch_23_8

恢复

假设172.0.0.1机器上的数据盘/ssd1坏了,数据全部丢了,需要对/ssd1的数据进行全面恢复
脚本:

# 安装sshpass
sudo yum -y install sshpass

# 副本节点ip和root账号密码
replica_host="172.0.0.2"
mpass="your_password"

# 创建基础的目录
mkdir /ssd1/ch_23_8
mkdir -p /ssd1/ch_default/metadata
mkdir -p /ssd1/ch_default/flags

# 设置目录owner
chown -R clickhouse:clickhouse /ssd1/ch_23_8
chown -R clickhouse:clickhouse /ssd1/ch_default

# 从副本节点把每个数据库的sql定义文件拷贝过来
sshpass -p "${mpass}" scp -p root@${replica_host}:/ssd1/ch_default/metadata/*.sql /ssd1/ch_default/metadata

chown -R clickhouse:clickhouse /ssd1/ch_default/

# 先启动一下然后停止,让clickhouse把每个数据库关联的软链接目录创建好
sudo -u clickhouse touch /ssd1/ch_default/flags/force_restore_data
chown -R clickhouse:clickhouse /ssd1/ch_default
systemctl start clickhouse-server
systemctl stop clickhouse-server


# dirs是字符串
dirs=`ls /ssd1/ch_default/metadata | grep -v "sql"`
# 转为数组
arrs=($dirs)

# 拷贝每个数据库的sql定义文件
for(( i=0; i<${#arrs[*]}; i++ ))
do
    sshpass -p "${mpass}" scp root@${replica_host}:/ssd1/ch_default/metadata/${arrs[$i]}/* /ssd1/ch_default/metadata/${arrs[$i]}/
done

# 正常恢复数据
sudo -u clickhouse touch /ssd1/ch_default/flags/force_restore_data
chown -R clickhouse:clickhouse /ssd1/ch_default
systemctl start clickhouse-server
tail -f /var/log/clickhouse-server/clickhouse-server.log
posted on 2024-09-11 19:01  北溟有鱼。  阅读(32)  评论(0编辑  收藏  举报