一 简介:来探讨下mongodb集群大表的备份切割问题
二 环境:
mongodb 3.0 集群
三 目的
将亿级表进行备份,切割出去,线上表只保留百万数据
四 步骤
工具:采用mongodump而不是export,bjson的体积远远小于json文件,这样无论在导入还是导出都非常有优势
1 导出
nohup mongodump --port 40000 --db dbname --collection tablename --query '{"sentTime": { $gt: "2018-07-13 00:00:00" } }' -o /home/ops/mongo &
2 导入
mongorestore --port 40000 --db dbname --collection table_20180813 /home/ops/mongo/tablename.bjson//这里要指定具体的bjson文件
3 表重命名
db.table.renameCollection("table_20180813BACK");
db.table_20180813.renameCollection("table");
4 添加相应索引
这里我要着重说下,针对集群的dump导入索引失败,所以在导入数据后一定要再次建立索引,否则会导致查询阻塞,服务器负载飙升,而且加上索引后,一段时间慢查询才会停止出现
五 总结
定期对大表进行切割,有利于查询的正常运行,我们是亿级进行手动切割.更推荐程序进行自动表的变更写入