Mongodb高级管理命令 mongodbnosql管理
1.克隆collection
命令格式:
- >db.runCommand({coloneCollection:"db_name.collection_name",from:"dest_server_ip:port"})
说明,在使用时把db_name替换成数据库名称,把collection_name替换成集合名称,dest_server_ip是代表远程数据库的宿主机ip地址,port代表端口号。
2.复制数据库
命令:copyDatabase(fromdb,todb,fromhost)
参数说明:
fromdb:源数据库名称
todb:目标数据库名称
fromhost:源数据库地址
- > db.copyDatabase("from_db","to_db","192.168.120.133");
如果是在本地复制数据库,则只要把fromhost设置为本机,即localhost即可。
3.刷新磁盘
在Mongodb中使用db.runCommand({fsync:1})命令可以将内存中尚未写入磁盘的信息写入磁盘,并锁住对数据库更新的操作,但读操作还能继续,如下所示(注:fsync命令只能在admin库上进行操作):
- > use admin
- switched to db admin
- > db.runCommand({fsync:1})
- { "numFiles" : 5, "ok" : 1 }
- >
验证数据库状态:db.currentOp()
- > db.currentOP()
- { "inprog" : [ ] }
- >
通过指定参数lock:1来锁定数据库的写操作:
- > db.runCommand({fsync:1,lock:1})
- {
- "info" : "now locked against writes, use db.fsyncUnlock() to unlock",
- "seeAlso" : "http://www.mongodb.org/display/DOCS/fsync+Command",
- "ok" : 1
- }
- > db.users.insert({"name":"yangbei"})
如上所示,当我在锁定对数据库的写操作后,如果我执行写操作,则该连接session会处于阻塞等待状态
解锁:db.$cmd.sys.unlock.findOne()
- > use admin
- switched to db admin
- > db.$cmd.sys.unlock.findOne()
- { "ok" : 1, "info" : "unlock completed" }
- > db.currentOP()
- {
- "inprog" : [ ],
- "fsyncLock" : 1,
- "info" : "use db.fsyncUnlock() to terminate the fsync write/snapshot lock"
- }
- >
4.数据压缩
命令:db.repairDatabase()
介绍:repairDatabase是Mongodb内置的一个方法,调用这个方法Mongodb会扫描数据库中所有的数据,并将通过导入/导出来重新整理数据集合,将碎片清理干净。但这个方法会导致整个db的读写操作变得非常缓慢,所以最好是采用停机维护的方式,即直接停止客户端的写入操作之后再进行清理。
在执行此命令时会对数据库进行加锁操作,如果命令未执行完或强制中断session,该锁依然存在,需要使用db.$cmd.sys.unlock.findOne()命令显示解锁。