`
chenzhou123520
  • 浏览: 4250160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mongodb高级管理命令

阅读更多

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()命令显示解锁。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics