进入mongo官网,选择相应的msi版本下载,安装时默认勾选安装MongoD服务和修改一些数据库配置,如已有数据库链接工具Robo 3T,可取消默认勾选的compass安装。web
若启动服务报mp错误,可修改binmongod.cfg,注释最后一行mp
安装后若是须要修改配置/服务或手动运行,能够参考以下:mongodb
能够经过命令行运行,也能够经过指定配置运行,以安装在D:MongoDB为例
# 单行配置 > D:\MongoDB\bin\mongod.exe --dbpath D:\MongoDB\data --logappend # 指定配置文件 > D:\MongoDB\bin\mongod.exe --config "D:\MongoDB\bin\mongod.cfg"
经过安装和运行服务,可让mongoDB之后台静默的方式运行。
安装/移除服务:shell
# 添加到windows服务 > D:\MongoDB\bin\mongod.exe --config "D:\MongoDB\bin\mongod.cfg" --install # 移除服务(以管理员身份运行cmd) > D:\MongoDB\bin\mongod.exe --remove
启动/关闭服务:数据库
> net start MongoDB > net stop MongoDB
Linux各版本镜像源: https://repo.mongodb.org/, 下面以CentOS系统为例:
# 更新yum包管理 $ yum -y update
查看当前系统版本
$ cat /etc/redhat-release
打开 https://repo.mongodb.org/yum/... ,选择适合本身系统的mongo版本,而后编辑Mongodb安装源,下面以3.6为例:
$ sudo vi /etc/yum.repos.d/mongodb-org-3.6.repo
编辑内容(根据本身的mongo版本替换下面的3.6字样):
[mongodb-org-3.6] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
安装:
$ yum install mongodb-org
mongo配置文件路径:/etc/mongod.conf,但若是用mongod命令直接运行(非service运行),此时若不用-f指定配置文件,mongo会使用内在配置,dbpath也默认存放在/data/db下
$ vi /etc/mongod.conf #-------------------------------------------------------- # 可修改数据库存放位置 storage: dbPath: /var/lib/mongodb # 若要支持远程链接,需将默认的127.0.0.1改成: net: port: 27017 bindIp: 0.0.0.0 # 若需数据库权限认证,开启下面配置: security: authorization: enabled
若远程链接工具Robo 3T仍是不能链接,需在防火墙增长端口:windows
$ sudo /sbin/iptables -I INPUT -p tcp --dport 27017 -j ACCEPT
通常service服务配置不用修改,若有须要,可查看:
$ sudo vi /lib/systemd/system/mongod.service
配置以下:
[Unit] Description=MongoDB Database Server After=network.target [Service] Type=forking User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/usr/bin/mongod --config /etc/mongod.conf --shutdown PIDFile=/var/run/mongodb/mongod.pid [Install] WantedBy=multi-user.target
服务配置如有变更,须要重载service服务
$ systemctl daemon-reload
经过上面mongod.service配置能够看到,service方式默认以mongodb用户,使用的是默认配置/etc/mongod.conf
# 启动 $ service mongod start # 或用systemctl管理 $ systemctl start mongod.service # 重启 $ service mongod restart # 关闭 $ service mongod stop
若启动出现timeout错误时,可查看service里的pid与config里的pid是否相同,不一致时需修改mongod.service配置
可设置mongod随机自启动
$ systemctl enable mongod.service
也能够经过手动建立软链实现
$ ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/
不建议用root用户启动mongod服务,可经过-u指定用户启动
# 手动指定配置文件 $ sudo mongod -f /etc/mongod.conf --fork # --fork后台运行 # 指定用户(mongodb) $ sudo -u mongodb mongod -f /etc/mongod.conf --fork # 开启权限认证模式 $ sudo mongod -f /etc/mongod.conf --auth --fork
$ sudo mongod -f /etc/mongod.conf --shutdown
$ tail -n30 /var/log/mongodb/mongod.log
# 进入mongo $ mongo # 显示当前数据库,默认定位test数据库 > db; # 显示全部数据库 > show dbs; # 切换/建立数据库 > use xxx; # 删除数据库 > db.dropDatabase(); # 修复数据库 > db.repairDatabase(); # 查看当前db的连接机器地址 > db.getMongo(); # 退出mongo > exit;
# 显示全部集合名 > show tables; # 或 > db.getCollectionNames(); # 建立集合 > db.createCollection('users', {size: 1024, max: 1000}); # 最大1M,1000条 # 删除集合 > db.users.drop();
3.2版本以后,对CRUD操做分别新增了单条和批量指令
# 查询记录 --------------------------------------------------------- > db.users.findOne(); # 查询集合里第一条 > db.users.find(); # 查询集合里所有 # 根据条件查询 > db.users.findOne({age: 8}); > db.users.find({name: /汪/}); # 正则模糊查询 # 返回指定字段 > db.users.find({name: /汪/}, {age: 1}) # 只返回age和默认_id, 为0相反,除了指定的其它终返回 # 新增记录 --------------------------------------------------------- > db.users.insertOne({name: 'wang', age: 8}); # 主键已存在会报错 > db.users.insertMany([{},{}]); # 新增多条 > db.users.save({name: 'wang', age: 8}); # 主键已存在会替换 # 修改记录 --------------------------------------------------------- > db.users.updateOne({name: 'wang'}, {$set: {sex: 'male'}}); > db.users.updateMany({name: 'wang'}, {$set: {sex: 'male'}}); # 通用写法(后面两个参数:第一个表示找不到则新建一条,第二个表示更新多条) > db.users.update({name: 'wang'}, {$set: {sex: 'male'}}, false, true); # 删除记录 --------------------------------------------------------- > db.users.deleteOne({age: 8}); > db.users.deleteMany({age: 8}); # 通用写法 > db.users.remove({age: 8}); # 默认多条 > db.users.remove({age: 8}, true); # 可设单条
对于web应用来讲,最经常使用的用户类型有:bash
用户类型 | 角色 | 管理用户 | 读写数据 | 身份受权库 |
---|---|---|---|---|
数据库用户 | read/readWrite | 无 | 指定库 | 指定库/admin |
全部数据库读写权限 | readWriteAnyDatabase | 无 | 任意库 | admin |
用户管理员 | userAdmin | 指定库 | 无 | 指定库/admin |
全部数据库管理员 | userAdminAnyDatabase | 任意库 | 无 | admin |
超级帐号 | root | 任意库 | 任意库 | admin |
# 显示全部用户 > show users; # 新建用户 > db.createUser({user:'用户名',pwd:'密码',roles:[{role:'角色',db:'库'}]}); # 若当前数据库与目标库相同,可简写: > db.createUser({user:'用户名',pwd:'密码',roles:['角色']}); # 追加用户权限 > db.grantRolesToUser('用户名',[{role:'角色',db:'库'}]); # 修改用户权限 > db.updateUser('用户名',{roles:['角色1','角色2']}); # 更新密码 > db.changeUserPassword('用户名','密码'); # 或 > db.updateUser('用户名',{pwd:'密码'}); # 删除用户 > db.dropUser('用户名');
root、*AnyDatabase角色用户、cluster集群等用户只能在admin库下建立
> use admin; # 超级管理员 > db.createUser({user:'root',pwd:'密码',roles:['root']}); # user管理员帐号 > db.createUser({user:'用户名',pwd:'密码',roles:['userAdminAnyDatabase']}); # 任意库读写帐号 > db.createUser({user:'用户名',pwd:'密码',roles:['readWriteAnyDatabase']}; # 普通读写用户(能够在admin库下建立,但认证时也需在admin库) > db.createUser({user:'用户名',pwd:'密码',roles:[{role:'readWrite',db:'业务库'}]});
mongoDB的权限是跟随库的,用户在哪一个库下建立的,则需在哪一个库进行auth认证,若是认证库和读写目标库一致,则链接时authSource参数可省略(见第四节:链接数据库)
> use xxx; > db.createUser({user:'用户名',pwd:'密码',roles:['readWrite']);
若是提示SCRAM-SHA-256 requires undigested passwords错误,须要加mechanisms,以下:
> db.createUser({user:'用户名',pwd:'密码',roles:['readWrite'],mechanisms: ['SCRAM-SHA-1']});
若是mongoDB未开启认证模式,全部用户的权限与root同样,任意操做。
$ mongo # 自定义host和端口 $ mongo --host 主机 --port 端口
mongoDB的权限是跟随库的,普通用户在哪一个库新建受权,就须要在哪一个库进行auth验证
$ mongo --host 主机 --port 端口 > use 认证数据库; > db.auth('用户名', '密码');
也能够登陆时一并受权认证:
$ mongo --host 主机 --port 端口 -u '用户名' -p '密码' --authenticationDatabase '身份认证所用库'
root和*AnyDatabase角色的权限只能在admin数据库里认证,如:
$ mongo --host 主机 --port 端口 -u root -p 123456 --authenticationDatabase admin
mongo://主机:端口/数据库名
a.)普通数据用户app
若当前用户认证的数据库与要操做的数据库相同,链接方式以下:
mongo://用户名:密码@主机:端口/数据库名
若不一样,则需添加authSource,例如:在admin库里认证了,角色db倒是xxx
mongo://用户名:密码@主机:端口/xxx?authSource=admin
b.)root和全部数据库用户tcp
若链接用户是root、*AnyDatabase角色、cluster集群的认证库都是admin
mongo://用户名:密码@主机:端口/数据库名?authSource=admin
c.)认证机制工具
mongoDB支持多种认证机制, 经常使用的有'MONGODB-CR' 和 'SCRAM-SHA-1' 两种,官方推荐 'SCRAM-SHA-1',此时不须要带在URI里,但若是是'MONGODB-CR'类型需加添加在URI上。
mongo://用户名:密码@主机:端口/数据库?authMechanism=认证机制&authSource=身份认证所用库
也适用于copy远程数据库到本地
$ mongodump --host 主机 --port 端口 --username 用户 --password "密码" --authenticationDatabase "受权库" --db 目标数据库 --out 存放目录
若本地数据库以非认证模式运行,恢复到本地可简单的以下:
$ mongorestore 存放目录
恢复远程认证数据库:
$ mongorestore --host 主机 --port 端口 --username 用户 --password "密码" --authenticationDatabase "受权库" 存放目录