日期:2014-05-16 浏览次数:20418 次
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()命令显示解锁。
?