Clickhouse-alter 对副本表修改表结构报元数据错误

[应用场景]
对分片副本表的列进行 alter 操作

[问题复现]

[解决办法]
检查该分片所有副本表的表结构和 zk 上存储的 column 信息保持一致,检查本地的表结构 sql 文件 /data/clickhouse/clickhouse-server/metadata/default/xxxx_xxxxtail_oi_bs.sql 和 zk 上存储的 column 元信息, 注意 zk 上存储 column 的信息有两处:
/clickhouse/tables/default-11/default/xxxx_xxxxtail_oi_bs/columns
/clickhouse/tables/default-11/default/xxxx_xxxxtail_oi_bs/replicas/172.16.16.42/columns

具体步骤如下:
1.重命名本地元数据SQL文件,比如: mv /data/clickhouse/clickhouse-server/metadata/default/xxxx_xxxxtail_oi_bs.sql /data/clickhouse/clickhouse-server/metadata/default/xxxx_xxxxtail_oi_bs.sql.bak
2.重启 clichouse-server
3.通过set 命令, 修改 zk 上两处 column 信息,例如;bin/zkCli.sh -server 172.16.16.28 set /clickhouse/tables/default-11/default/xxxx_xxxxtail_oi_bs/columns "cat /opt/sre_dir/11_col_2"
4.编辑第一步中 sql.bak 文件,使之与第三步中 zk 中的信息一致.并把文件名改回来, mv xxx.sql.bak xxx.sql
5.执行 atttach 语句: attach table xxxx_xxxxtail_oi_bs

如果这样操作以后,还是报和 zookeeper 上的元数据不一致的错误,例如:

这个时候要恢复业务,只能新建同样结构的副本表,新建时设置与旧的副本表 zookeeper 地址不一样.接着再手动把旧表的数据 attach 到新表上.操作步骤见:
https://www.cnblogs.com/hdpdriver/p/16088755.html

接着删除旧表,将新表重命名为旧表名,完成迁移.

posted @ 2022-04-01 21:40  hdpdriver  阅读(424)  评论(0编辑  收藏  举报