Clickhouse-alter 對副本表修改表結構報元資料錯誤
[應用場景]
對分片副本表的列進行 alter 操作
[問題復現]
[解決辦法]
檢查該分片所有副本表的表結構和 zk 上儲存的 column 資訊保持一致,檢查本地的表結構 sql 檔案 /data/clickhouse/clickhouse-server/metadata/default/srmp_youpin_user_action_detail_oi_bs.sql 和 zk 上儲存的 column 元資訊, 注意 zk 上儲存 column 的資訊有兩處:
/clickhouse/tables/default-11/default/srmp_youpin_user_action_detail_oi_bs/columns
/clickhouse/tables/default-11/default/srmp_youpin_user_action_detail_oi_bs/replicas/172.16.16.42/columns
具體步驟如下:
1.重新命名本地元資料SQL檔案,比如: mv /data/clickhouse/clickhouse-server/metadata/default/srmp_youpin_user_action_detail_oi_bs.sql /data/clickhouse/clickhouse-server/metadata/default/srmp_youpin_user_action_detail_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/srmp_youpin_user_action_detail_oi_bs/columns "cat /opt/sre_dir/11_col_2"
4.編輯第一步中 sql.bak 檔案,使之與第三步中 zk 中的資訊一致.並把檔名改回來, mv xxx.sql.bak xxx.sql
5.執行 atttach 語句: attach table srmp_youpin_user_action_detail_oi_bs
如果這樣操作以後,還是報和 zookeeper 上的元資料不一致的錯誤,例如:
這個時候要恢復業務,只能新建同樣結構的副本表,新建時設定與舊的副本表 zookeeper 地址不一樣.接著再手動把舊錶的資料 attach 到新表上.操作步驟見:
https://www.cnblogs.com/hdpdriver/p/16088755.html
接著刪除舊錶,將新表重新命名為舊錶名,完成遷移.