Mongodb高级管理命令

1.克隆collection

命令格式:

Js代码   收藏代码
  1. >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:源数据库地址

Js代码   收藏代码
  1. > db.copyDatabase("from_db","to_db","192.168.120.133");  

如果是在本地复制数据库,则只要把fromhost设置为本机,即localhost即可。 

3.刷新磁盘

在Mongodb中使用db.runCommand({fsync:1})命令可以将内存中尚未写入磁盘的信息写入磁盘,并锁住对数据库更新的操作,但读操作还能继续,如下所示(注:fsync命令只能在admin库上进行操作):

Js代码   收藏代码
  1. > use admin  
  2. switched to db admin  
  3. > db.runCommand({fsync:1})  
  4. "numFiles" : 5, "ok" : 1 }  
  5. >   

验证数据库状态:db.currentOp()

Js代码   收藏代码
  1. > db.currentOP()  
  2. "inprog" : [ ] }  
  3. >   

通过指定参数lock:1来锁定数据库的写操作:

Js代码   收藏代码
  1. > db.runCommand({fsync:1,lock:1})  
  2. {  
  3.     "info" : "now locked against writes, use db.fsyncUnlock() to unlock",  
  4.     "seeAlso" : "http://www.mongodb.org/display/DOCS/fsync+Command",  
  5.     "ok" : 1  
  6. }  
  7. > db.users.insert({"name":"yangbei"})  

如上所示,当我在锁定对数据库的写操作后,如果我执行写操作,则该连接session会处于阻塞等待状态 

解锁:db.$cmd.sys.unlock.findOne()

Js代码   收藏代码
  1. > use admin  
  2. switched to db admin  
  3. > db.$cmd.sys.unlock.findOne()  
  4. "ok" : 1, "info" : "unlock completed" }  
  5. > db.currentOP()  
  6. {  
  7.     "inprog" : [ ],  
  8.     "fsyncLock" : 1,  
  9.     "info" : "use db.fsyncUnlock() to terminate the fsync write/snapshot lock"  
  10. }  
  11. >   

4.数据压缩

命令:db.repairDatabase()

介绍:repairDatabase是Mongodb内置的一个方法,调用这个方法Mongodb会扫描数据库中所有的数据,并将通过导入/导出来重新整理数据集合,将碎片清理干净。但这个方法会导致整个db的读写操作变得非常缓慢,所以最好是采用停机维护的方式,即直接停止客户端的写入操作之后再进行清理。

在执行此命令时会对数据库进行加锁操作,如果命令未执行完或强制中断session,该锁依然存在,需要使用db.$cmd.sys.unlock.findOne()命令显示解锁。

猜你喜欢

转载自paynexss.iteye.com/blog/2317886