1 问题描述
应用程序和MongoDB运行时,在查询和读取文件的时候发生的文件量较多。
1.查询索引
db.page.getIndexes()
2.配置conf
# Where and how to store data.
storage:
dbPath: /var/lib/mongo
#dbPath: /mongodata
journal:
enabled: true
# engine:
mmapv1:
smallFiles: true
wiredTiger:
engineConfig:
configString : cache_size=512M
或者
systemLog:
destination: file
path: "D:\\db.log"
logAppend: true
storage:
dbPath: "D:\\db"
directoryPerDB: true
journal:
enabled: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.256
net:
bindIp: 127.0.0.1
port: 27017
security:
authorization: disabled
出现这种情况的原因:
1.索引问题,加上指定的内存,会导致启动索引会吃掉所有内存导致杀死进程,以致于mongodb内存溢出关机,mongodb的重建索引的时候,吃掉所有内存。
2.就是决定它自己要用多少内存的代码了。先留出1G,然后再留出40%,剩下的能吃就吃!这种情况在机器内存少的时候没有出现,大概是因为内存少的时候,mongod 留出的比例比较高,内核就没那么卖力地把数据往 swap 上挪了,结果造成内核挪多少,mongod 吃多少……
解决办法:
要配置mongoDB的内存为MB
当你的内存大于1GB,mongodb会用掉 内存的60% - 1GB 的内存作为缓存;
当你的内存小于1GB,mongodb会直接用掉1GB。
关于我的配置文件conf:
storage:
dbPath: D:\MongoDB\Server\5.0\data
journal:
enabled: true
wiredTiger:
engineConfig:
configString : cache_size=512M
systemLog:
destination: file
logAppend: true
path: D:\MongoDB\Server\5.0\log\mongod.log
net:
port: 27017
bindIp: 127.0.0.1
配置详情
systemLog:
quiet: false
path: D:\mongodb\logs\mongo.log
logAppend: false
destination: file
net:
bindIp: 0.0.0.0
port: 27017
maxIncomingConnections: 65536 //进程允许的最大连接数 默认值为 65536
wireObjectCheck: true //开启验证数据有效性
storage:
dbPath: D:\mongodb\data
indexBuildRetry: true // 当构建引时 索引构建失败,mongod重启后将会删除尚未完成的索引
journal: //日志持久存储,根据电脑配置选择开启,用于故障恢复,仅对 mongod 进程有效。
enabled: true
directoryPerDB: false //是否将不同 DB 的数据存储在不同的目录中 默认值为 false
engine: wiredTiger // 存储引擎类型 推荐使用 wiredTiger(3.2版本后默认引擎)
syncPeriodSecs: 60 //默认60s 即延迟写入磁盘,有效提升磁盘效率
wiredTiger:
engineConfig:
cacheSizeGB: 4 //wiredTiger 缓存工作集 限制使用内存大小 单位gb
journalCompressor: snappy
directoryForIndexes: false //不分别存储
collectionConfig:
blockCompressor: snappy //文件压缩算法配置 可选值为 “none”、“snappy”、“zlib”
indexConfig: //读取索引配置
prefixCompression: true ////是否对索引数据使用 “前缀压缩”减少索引数据的内存使用量。
security:
authorization: enabled //开启用户认证
clusterAuthMode: keyFile //主从、分片、副本集配置需要配置keyFile
keyFile: D:\mongodb\keyFile // 钥匙keyfile
javascriptEnabled: false // 不允许执行 javascript脚本
权限认证:
设置mongoDB的用户名密码
1、启动mongo
找到配置文件bin,命令行运行命令:./bin/mongo
注:windows环境下进入mongodb,cmd输入mongo即可
2、查看当前已存在的数据库
show dbs
3、切换到你想要运行添加用户名、密码的数据库
use XXX (XXX为你想要操作的数据库的名字)
4、为当前的数据库添加用户
db.createUser({user:’username’,pwd:’password’,roles:[{role:”readWrite”,db:”XXX”}]})
注意:readWrite为你想让用户拥有的权限,可根据不同的需求给用户设置不同的权限。
注:验证是否创建成功用户,成功则返回1
db. auth( "username" , "password")
5、修改配置文件
打开mongoldb.config文件,在文件中添加代码auth = true,保存退出
6、重启mongoDB
首先结束进程:pkill mongod
通过配置文件启动mongoDB:./bin/mongod -f mongodb.conf
关于mongodB.cpnfig的配置:
看看mongodb内置角色:
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
7. 内部角色:__system
关于服务重复要先移除服务
mongod --config "D:\mongoDB\mong\mongodb.config" --install --serviceName "MongoDB"
mongod --config "D:\mongoDB\mong\mongodb.config" --reinstall --serviceName "MongoDB"
使用把你后面的 --install参数替换为--reinstall参数重试,建议你使用配置文件的方式安装mongodb的服务,以后需要修改参数的时候只需要修改对应的配置文件并重启服务即可
关于端口连接测试
wget ip:port
关于mongodb数据导出和导入命令记录
导出:mongodump.exe -h ip:port -d 数据库名称 -o 导出路径
导入:mongorestore.exe -h ip:port -u 账户 -p 密码 --authenticationDatabase admin -d pty 导出路径
或者
mongorestore.exe -h ip:port --authenticationDatabase admin -d pty 导出路径
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。