MongoDB系列~常用命令
一、活跃会话查看
要查询运行时间超过3秒的活跃会话,可以使用以下命令:
db.currentOp({ "active" : true, "secs_running" : { "$gt" : 3 }}).inprog.forEach(function(item){
print(item.client, item.opid, item.ns, JSON.stringify(item.query));
});
这个命令将打印出所有活跃会话的客户端地址、操作ID、命名空间以及查询内容。
二、终止会话
如果要批量终止运行时间超过3秒的活跃会话,可以使用以下命令:
db.currentOp().inprog.forEach(function(item){
if(item.secs_running > 3) {
db.killOp(item.opid);
}
});
另外,要终止指定活跃会话,可以使用以下命令:
db.killOp(item.opid);
请将item.opid
替换为要终止的会话的实际操作ID。
三、回收磁盘空间 - Drop
要删除数据库或集合文件并立即释放空间,可以使用以下命令:
// 删除数据库
db.dropDatabase();
// 删除集合
db.collection.drop();
请注意,这些操作将永久删除数据库或集合及其所有数据,请谨慎使用。
四、回收磁盘空间 - Compact
要回收磁盘空间,可以先删除不需要的数据,然后使用compact
命令对集合进行压缩。以下是示例步骤:
// 删除表中的数据
db.collection.remove({});
// 切换到目标数据库
use test_database;
// 查看磁盘空间占用
db.stats();
// 执行回收
db.runCommand({ compact: "<collection_name>", force: true });
// 再次查看磁盘占用
db.stats();
请将<collection_name>
替换为要压缩的集合的实际名称。
五、Mongostat
mongostat
是一个用于监视MongoDB实例性能的实用程序。以下是一些关键指标的解释:
-
insert/update/delete/select/getmore
:分别表示插入、更新、删除、查询和获取更多操作的速率。 -
dirty|virtual
:脏数据和虚拟内存的使用情况。脏数据不能超过15%,虚拟内存不能超过85%。 -
conn
:当前连接数。 -
qr|qw
:阻塞的读写队列长度。
要运行mongostat
并连接到特定的MongoDB实例,可以使用以下命令:
./mongostat --host ip:port --username root --password xx --authenticationDatabase admin
请将ip:port
替换为MongoDB实例的实际IP地址和端口号,并提供正确的用户名、密码和认证数据库。
六、Mongotop
mongotop
是一个用于监视MongoDB实例中各个集合的读写操作的实用程序。它可以帮助您定位热点库表。以下是mongotop
的输出示例:
read write
collection1 10ms 5ms
collection2 0ms 10ms
要运行mongotop
并连接到特定的MongoDB实例,可以使用以下命令:
./mongotop --host ip:port --username root --password xx --authenticationDatabase admin
同样,请将ip:port
替换为MongoDB实例的实际IP地址和端口号,并提供正确的用户名、密码和认证数据库。
七、导入导出
要使用mongodump
导出MongoDB数据,可以使用以下命令:
/usr/local/mongo_tools/bin/mongodump --host xxx --port 27017 --username xxx --password xxxx --authenticationDatabase admin --db xxx --out dump
=
要使用mongorestore
导入MongoDB数据,可以使用以下命令:
/usr/local/mongo_tools/bin/mongorestore --host xxx --port 27017 --username xxx --password xxxx --authenticationDatabase admin --db xxx dump/
请将xxx
和xxxx
替换为实际的IP地址、端口号、用户名、密码和数据库名称。
八、创建用户
要在MongoDB中创建用户,可以使用以下命令:
use xx;
db.createUser({ user: "xxx", pwd: "xx", roles: [{ role: "readWrite", db: "dxxx" }] });
请将xx
、xxx
和dxxx
替换为实际的数据库名称、用户名、密码和角色信息。