Cassandra表目录UUID与system_schema.tables不匹配问题求助
解决Cassandra表目录UUID与system_schema不匹配的问题
操作前准备
- 先停掉当前节点的Cassandra服务:
sudo systemctl stop cassandra(如果用的是init脚本,就用service cassandra stop) - 务必备份旧数据目录和相关元数据,防止操作失误丢数据:
sudo tar -czf table_backup_$(date +%Y%m%d).tar.gz /var/lib/cassandra/data/你的键空间名/旧UUID目录名
数据迁移步骤
- 先确认表的正确UUID,用CQL客户端执行:
SELECT id FROM system_schema.tables WHERE keyspace_name = '你的键空间名' AND table_name = '你的表名'; - 把旧UUID目录下的所有SSTable相关文件(包括.db、.index、.summary、.digest这些后缀的文件)移动到新生成的正确UUID目录里:
sudo mv /var/lib/cassandra/data/你的键空间名/旧UUID目录名/* /var/lib/cassandra/data/你的键空间名/正确UUID目录名/ - 修复文件权限,保证Cassandra进程能正常读写:
sudo chown -R cassandra:cassandra /var/lib/cassandra/data/你的键空间名/正确UUID目录名/
验证与收尾
- 启动Cassandra服务:
sudo systemctl start cassandra - 用
nodetool tablestats 你的键空间名.你的表名检查数据加载状态,或者执行SELECT COUNT(*) FROM 你的键空间名.你的表名;确认数据都在 - 确认一切正常后,再删除旧的UUID目录:
sudo rm -rf /var/lib/cassandra/data/你的键空间名/旧UUID目录名/
关键提醒
- 操作前的备份是必须的,不能省略
- 如果是多节点集群,要逐个节点处理,每个节点处理完启动后,等数据同步完成再处理下一个
- 不要同时操作多个节点,避免集群出现数据不一致
内容的提问来源于stack exchange,提问作者enes ataberk
相关产品推荐
相关产品推荐

