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
人生如修仙,岂是一日间。何时登临顶,上善若水前。