Cassandra使用问题:实体键未迁移,hash_key与key_desc_id不一致如何解决
Cassandra 实体键hash_key与key_desc_id不一致修复方案
从提供的查询结果可知,当前k2_hash_key对应的id为1638430494138,但entity表中所有记录的key_desc_id统一为1572012180007,两者不匹配导致实体键校验异常,可按以下步骤修复:
修复前准备
- 全量备份k2view_cc键空间下的entity表以及存储键描述的元数据表,避免操作失误导致数据丢失,备份命令参考:
cqlsh -e "COPY k2view_cc.entity TO '/data/backup/entity_2024xxxx.csv' WITH HEADER = true;" - 暂停所有对接该Cassandra集群的业务读写流量,避免修复过程中生成新的脏数据。
修复操作
方案1:批量更新entity表key_desc_id(推荐,影响范围可控)
该方案适用于确认k2_hash_key对应的元数据id1638430494138为正确值的场景:
- 先验证待更新的记录范围是否符合预期:
SELECT COUNT(*) FROM k2view_cc.entity WHERE key_desc_id = 1572012180007;
- 确认记录数匹配后执行批量更新,建议按id分批更新避免全表扫描影响集群性能,示例语句:
UPDATE k2view_cc.entity SET key_desc_id = 1638430494138 WHERE id IN ( 'D54C994CF3CBDA1F70E37853B07388D0C65E824F1BDF3D4F83731513EB8A5399', 'DD5C1E2D9395CA6B1B5ABDF87C03392493F03328F37830045749EA1AE725AF91', '3467EA971FC018EB561F07F57547CF17E618B76D93B4F8471280C3CF8FB32D58', 'EB4A8D07DF41EDDB49D530BE39B8D8850AFF7D108787CE1EF46EE27D00E99E57', 'AB92F2C90E3337EED0B68B2EC1B56B6FA45A9461C711406B7ED01BE7B29F75EE', '9BC6D9862B68C8AE810CC1A00BFF87ADF6A95A262C98987780807D458682330C', 'AFE8B598517CCFC09E71DF10417DAC3B1002731F43334CA6872BC4CEA9A07D75' );
方案2:修正元数据表的k2_hash_key ID
该方案适用于确认entity表中key_desc_id1572012180007为正确值,只是元数据表中k2_hash_key的ID配置错误的场景,执行以下语句更新元数据:
UPDATE 存储键描述的元数据表名 SET id = 1572012180007 WHERE name = 'k2_hash_key';
修复后验证
- 执行关联查询验证匹配关系是否正确:
SELECT e.id, e.key_desc_id, k.name FROM k2view_cc.entity e LEFT JOIN 存储键描述的元数据表名 k ON e.key_desc_id = k.id LIMIT 10;
返回结果中name字段为k2_hash_key即表示关联关系修复成功。
2. 恢复业务流量,持续观察业务日志是否还有实体键相关异常抛出。
内容的提问来源于stack exchange,提问作者freddy
相关产品推荐
相关产品推荐

