删除键空间 #
一、删除概述 #
1.1 删除影响 #
删除键空间将永久删除其中所有数据,操作不可逆。
text
删除影响:
┌─────────────────────────────────────────────────────────┐
│ │
│ 删除键空间将: │
│ ├── 删除所有表 │
│ ├── 删除所有数据 │
│ ├── 删除用户定义类型 │
│ ├── 删除用户定义函数 │
│ └── 删除相关权限设置 │
│ │
│ ⚠️ 操作不可逆,请谨慎操作 │
│ │
└─────────────────────────────────────────────────────────┘
1.2 删除前检查 #
text
删除前检查清单:
├── [ ] 确认键空间名称正确
├── [ ] 确认数据不再需要
├── [ ] 已备份重要数据
├── [ ] 确认无应用依赖
├── [ ] 获得相关审批
└── [ ] 选择合适时间窗口
二、基本语法 #
2.1 DROP KEYSPACE语法 #
sql
DROP KEYSPACE [IF EXISTS] keyspace_name;
2.2 简单示例 #
sql
-- 删除键空间
DROP KEYSPACE my_keyspace;
-- 使用IF EXISTS避免错误
DROP KEYSPACE IF EXISTS my_keyspace;
三、删除操作 #
3.1 标准删除流程 #
sql
-- 1. 查看键空间信息
DESCRIBE KEYSPACE my_keyspace;
-- 2. 确认包含的表
DESCRIBE TABLES IN my_keyspace;
-- 3. 确认数据量(可选)
SELECT COUNT(*) FROM my_keyspace.users;
-- 4. 执行删除
DROP KEYSPACE IF EXISTS my_keyspace;
-- 5. 验证删除结果
DESCRIBE KEYSPACES;
3.2 删除前备份 #
bash
# 使用nodetool快照备份
nodetool snapshot my_keyspace
# 查看快照位置
nodetool listsnapshots
# 快照默认存储在:
# /var/lib/scylla/data/keyspace/table-uuid/snapshots/snapshot_name/
3.3 导出数据 #
bash
# 使用cqlsh导出数据
cqlsh -e "DESCRIBE KEYSPACE my_keyspace" > my_keyspace_schema.cql
# 导出表数据
cqlsh -e "COPY my_keyspace.users TO 'users.csv'"
# 导出所有表
for table in $(cqlsh -e "DESCRIBE TABLES IN my_keyspace" | grep -v '^$'); do
cqlsh -e "COPY my_keyspace.$table TO '${table}.csv'"
done
四、删除场景 #
4.1 清理测试环境 #
sql
-- 删除测试键空间
DROP KEYSPACE IF EXISTS test_keyspace;
-- 批量删除测试键空间
DROP KEYSPACE IF EXISTS test_1;
DROP KEYSPACE IF EXISTS test_2;
DROP KEYSPACE IF EXISTS test_3;
4.2 迁移后清理 #
sql
-- 数据迁移完成后删除旧键空间
-- 1. 确认新键空间数据正确
SELECT COUNT(*) FROM new_keyspace.users;
-- 2. 删除旧键空间
DROP KEYSPACE IF EXISTS old_keyspace;
4.3 重建键空间 #
sql
-- 删除并重建键空间
DROP KEYSPACE IF EXISTS my_keyspace;
CREATE KEYSPACE my_keyspace
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
-- 重建表
CREATE TABLE my_keyspace.users (...);
五、删除后恢复 #
5.1 从快照恢复 #
bash
# 1. 重建键空间
cqlsh -e "CREATE KEYSPACE my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3}"
# 2. 重建表结构
cqlsh -e "CREATE TABLE my_keyspace.users (...)"
# 3. 从快照恢复数据
# 找到快照目录
SNAPSHOT_DIR="/var/lib/scylla/data/my_keyspace/users-uuid/snapshots/snapshot_name"
# 恢复数据
nodetool refresh my_keyspace users
# 或手动复制SSTable
cp $SNAPSHOT_DIR/*.db /var/lib/scylla/data/my_keyspace/users-uuid/
nodetool refresh my_keyspace users
5.2 从导出文件恢复 #
bash
# 从CSV恢复数据
cqlsh -e "COPY my_keyspace.users FROM 'users.csv'"
# 从CQL脚本恢复
cqlsh -f my_keyspace_schema.cql
cqlsh -f my_keyspace_data.cql
5.3 从备份工具恢复 #
bash
# 使用ScyllaDB Manager恢复
# sctool restore --cluster my_cluster --keyspace my_keyspace
# 使用自定义备份脚本恢复
# ./restore_backup.sh my_keyspace
六、权限管理 #
6.1 删除权限要求 #
sql
-- 需要DROP权限
GRANT DROP ON KEYSPACE my_keyspace TO user1;
-- 或授予所有权限
GRANT ALL PERMISSIONS ON KEYSPACE my_keyspace TO admin;
6.2 查看权限 #
sql
-- 查看用户权限
LIST ALL PERMISSIONS OF user1;
-- 查看键空间权限
LIST ALL PERMISSIONS ON KEYSPACE my_keyspace;
七、删除注意事项 #
7.1 性能影响 #
text
删除性能影响:
├── 大键空间删除可能耗时
├── 删除期间可能影响性能
├── 建议在低峰期执行
├── 监控集群负载
└── 大量数据删除后考虑compact
7.2 应用影响 #
text
应用影响检查:
├── 确认无应用连接该键空间
├── 更新应用配置
├── 通知相关团队
├── 准备回滚方案
└── 监控应用日志
7.3 数据一致性 #
text
数据一致性检查:
├── 确认所有节点同步
├── 检查副本状态
├── 验证数据完整性
└── 确认无残留数据
八、常见错误处理 #
8.1 键空间不存在 #
sql
-- 错误
DROP KEYSPACE nonexistent_ks;
-- Error: Keyspace 'nonexistent_ks' doesn't exist
-- 解决:使用IF EXISTS
DROP KEYSPACE IF EXISTS nonexistent_ks;
8.2 权限不足 #
sql
-- 错误
DROP KEYSPACE my_keyspace;
-- Error: Unauthorized
-- 解决:使用有权限的用户
-- 或授予权限
GRANT DROP ON KEYSPACE my_keyspace TO current_user;
8.3 键空间正在使用 #
sql
-- 如果有活跃连接可能影响删除
-- 建议先断开所有连接
-- 查看活跃连接
-- 使用nodetool或监控工具
-- 强制删除(谨慎使用)
DROP KEYSPACE IF EXISTS my_keyspace;
九、删除后清理 #
9.1 清理磁盘空间 #
bash
# 删除后执行compact释放空间
nodetool compact
# 清理已删除的数据
nodetool cleanup
# 查看磁盘使用
df -h /var/lib/scylla
9.2 清理快照 #
bash
# 查看快照
nodetool listsnapshots
# 清理旧快照
nodetool clearsnapshot
# 清理特定快照
nodetool clearsnapshot -t snapshot_name
9.3 更新监控配置 #
bash
# 更新监控配置
# 移除已删除键空间的监控
# 更新告警规则
# 移除相关告警配置
十、最佳实践 #
10.1 删除流程 #
text
标准删除流程:
├── 1. 评估删除影响
├── 2. 通知相关团队
├── 3. 备份重要数据
├── 4. 导出数据(可选)
├── 5. 创建快照
├── 6. 执行删除
├── 7. 验证删除结果
├── 8. 清理资源
└── 9. 更新文档
10.2 安全删除建议 #
| 建议 | 说明 |
|---|---|
| 使用IF EXISTS | 避免错误 |
| 先备份再删除 | 数据安全 |
| 选择低峰期 | 减少影响 |
| 监控删除过程 | 及时发现问题 |
| 保留快照一段时间 | 应急恢复 |
十一、总结 #
删除键空间要点:
| 要点 | 说明 |
|---|---|
| 不可逆 | 删除后无法恢复 |
| 先备份 | 保护重要数据 |
| 使用IF EXISTS | 避免错误 |
| 权限要求 | 需要DROP权限 |
最佳实践:
- 删除前必须备份
- 使用IF EXISTS避免错误
- 选择低峰期执行
- 通知相关团队
- 保留快照以备恢复
下一步,让我们学习表操作!
最后更新:2026-03-27