MongoDB 摆好正确操作数据库的姿势

上篇文章讲了如何安装MongoDB以及碰到的一些问题。

这次,讲一下MongoDB的一些常规操作。

设置可远程连接

服务开启后,查看设置的bind_ip是否可远程

总所周知,linux运维对端口信息的查看都是使用netstat

netstat -nltp

local:访问端口的方式,0.0.0.0是对外开放端口;127.0.0.1说明只对本机访问,外面访问不了

Address:端口

Foreign Address:对外开放,一般都是0.0.0.0:*

Program name:此端口是使用的程序挂载此端口

设置MongoDB用户和密码

使用mongo命令连接MongoDB客户端

mongo

# 切换admin

use admin

# 添加超级用户

db.createUser({user:‘用户名‘,pwd:‘密码‘,roles:[‘root‘]);

# 创建普通用户

db.createUser({user:‘用户名‘,pwd:‘密码‘,roles:[{role:‘userAdminAnyDatabase‘,db:‘admin‘}]);

一般情况下,mongoDB 数据库都要建立认证连接,这就需要用户对数据库创建管理员和用户认证,而对于mongoDB 而言,在创建管理员和用户时,分配的roles 是决定用户操作数据库权限的关键

role类型:

1. 数据库用户角色:read、readWrite
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
3. 备份恢复角色:backup、restore
4. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
5. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
6. 超级用户角色:root

read:授予User只读数据的权限

readWrite:授予User读写数据的权限

dbAdmin:在当前db中执行管理操作

dbOwner:在当前db中指定任何操作

UserAdmin:在当前db中管理User

backup:备份

restore:还原

readAnyDatabase:授予在所有数据库上读取数据的权限

readWriteAnyDatabase:授予在所有数据库上读写数据的权限

userAdminAnyDatabase:授予在所有数据库上管理User的权限

dbAdminAnyDatabase授予管理所有数据库的权限

clusterAdmin:授予管理集群的最高权限

clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.

clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限

hostManager:管理Server

root:只在admin数据库中可用。超级账号,超级权限

# 查看当前数据库用户

show users

# 查看所有数据库

show dbs

报错:身份认证失败(说白了,就是没有登录呗)

解决办法:认证(就相当于登录了)

use admin

db.auth(‘用户名‘,‘密码‘)

总结:

增加用户

db.createUser({user:‘用户‘,pwd:‘密码‘,roles:[{role:‘用户角色‘,db:‘目标数据库‘}]})

删除用户(2种方法,db.system.users指的是所有数据库中的指定用户,db只删除本数据库中指定用户)

db.dropUser(‘用户‘)

db.system.users.remove({_id:‘用户id‘})

db.system.users.remove({user:‘用户名‘})

修改用户

(1)授予用户角色权限

使用db.grantRolesToUser(‘用户‘,[role:‘角色权限‘,db:‘对应数据库‘])

(2)撤销用户的角色权限

使用db.revokeRolesFromUser(‘操作用户‘,[{role:‘要移除的角色权限‘,db:‘对应数据库‘}])

(3)修改密码

db.changeUserPassword(‘要修改密码的用户‘,‘修改后的密码‘)

MongoDB常用命令:

show dbs  显示数据库列表

show collections  显示当前数据库中的集合(就是关系型数据库中的表)

show users  显示用户(当前数据库的)

use <db name>  切换当前数据库,如果当前数据库不存在则创建该数据库

db.help()    显示数据库操作命令

db.foo.help()  显示集合操作命令,foo指的是集合(表)

db.foo.find()  对于当前数据库的foo集合进行数据查找(没有条件,默认查找所有数据)

db.foo.find({a:1})  对于当前数据库的foo集合进行查找,条件是数据中有一个属性是a,值是1

其他命令:

db.dropDatabase()  删除当前使用的数据库

db.cloneDatabase(‘ip‘)  将指定机器上的数据库的数据克隆岛当前数据库

db.copyDatabase(‘mydb‘,‘temp‘,‘127.0.0.1‘)  将本机上的mydb的数据复制到temp数据库

db.repairDatabase()  修复当前数据库

db.getName()  查看当前使用的数据库,也可以直接使用db

db.stats()  显示当前db状态

db.version()  查看当前的db版本

db.getMongo()  查看当前db的连接机器地址

db.serverStatus()  查看数据库服务器的状态

注意:

1.root用户

创建完超级管理员后,到数据库创建自己的用户时,一定要切换到所在数据库上去创建用户,不然创建创建用户还是属于admin

2.查看用户

show users是查看当前数据库所有用户,想要查看所有用户:

use admin

# 这时候需要验证先用户

db.auth(‘用户名‘,‘密码‘)

# 查看所有用户

db.system.users.find().pretty()

3.一些经典错误

(1)过多用户验证,这个需要退出命令行,重新认证,一次登录只认证一个用户

(2)对于使用密码、换端口登录的伙计,这里有必要讲一下授权和认证,这两概念也是有点东西的

创建所有用户都在admin库下的system.users集合下,有如下字段:

db字段是用于authentication用的,就是连接MongoDB的时候,指定--authenticationDatabase选项的值。

roles字段里面的db是指这个用户具体是在db中扮演着什么样的角色(读、写、只读、只写、授权等),所以这个db和外面的db要分清楚了。

mongo -u 用户 -p 密码 -authenticationDatabase ‘认证的数据库‘ -port 端口

可以去看看mongo --help哦

(3)上篇MongoDB安装的时候有个问题,现在是时候解决了!!!

使用命令行启动MongoDB的话,必须指定dbpath,我就是配置文件的dbpath路径有问题,所以运行报错,无法启动。

还有一点就是:MongoDB目录必须有执行权限哦,要不然mongod命令执行会出错,我现在命令行启动MongoDB碰到的最多的两个错误(后面会写一篇专门的错误解决方法)

对于在服务器上配置MongoDB的操作差不多就是这些了,对于深入学习MongoDB的话,后面看吧

原文地址:https://www.cnblogs.com/Ink-kai/p/12199408.html

时间: 2024-08-29 15:51:26

MongoDB 摆好正确操作数据库的姿势的相关文章

关于 spring 使用 mongodb 的 mongotemplate 对象操作数据库,对象注入问题(即该对象能否正常的调用相应的CRUD方法来处理数据)

通过 spring 框架,直接调用一些处理对象的方法和数据库交互, http 接口从 controller 层调用开始, 如果是:controller --> service --> dao --> entity 这个流程正常调用,则: (1)controller1 --> service1 --> dao1 -->entity1 (2)controller1 --> service2 --> dao2 -->entity2 (类推 3.4.5--都可

node.js操作数据库之MongoDB+mongoose篇

前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件存储的开源数据库系统.本文为大家详细介绍了如何用node.js + mongoose 玩转MongoDB.希望能帮到有需要的人. 由于我用Mac开发,以下所有操作都是在Mac下进行. 一. 环境搭建 安装Node.js 有 node 环境的可以跳过. nodejs官网提供了 macOS 安装包,直接

MongoDB与MySQL的操作对比表及区别介绍

MongoDB与MySQL的操作对比表及区别介绍 MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方.所以我们所熟知的那些SQL(全称Structured Query Language)语句就不适用于MongoDB了,因为SQL语句是关系型数据库的标准语言. 以我们公司项目为例,在早期的项目中,都在使用关系型数据库,用过SQLServer,Orac

封装JDBC操作数据库的方法

自己动手封装java操作数据库的方法: 一:目录结构 二:所需依赖的第三方jar包 这里只需引入mysql-connector-java-5.1.8-bin.jar,mysql数据库驱动jar包 三:代码 1:和数据库进行交互,首先是数据源,获取连接,代码如下: 1 /** 2 * 3 */ 4 package com.hlcui.datasource; 5 6 import java.sql.Connection; 7 import java.sql.DriverManager; 8 impo

傻瓜式操作数据库

#!/bin/bash                                          ######################################################                                          #                                                    #                                          #    

Python之MySQLdb操作数据库

一.python操作数据库 1.格式:大概分为三部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 代码 import MySQLdb conn = MySQLdb.connect(host='192.168.0.180',user='cattle',passwd='cattle',db='cattle') cur = conn.cursor()  #创建连接 reCount = cur.execute('select * from admin') data

【转载】操作数据库的一些好的方式

只要操作的正式库,写下第一行肯定是begin trans,第2行肯定是rollback,然后在中间开始敲你要的东西.敲完了点全部执行,看影响了多少行.如果符合预期,把rollback改成commit,正式执行. 很多时候,看到“xxxxxxx row(s) affected”明知道有rollback也会吓一身冷汗出来的 另一个回答: 偶尔要做 DB 维护,这是一点点经验. 不要走神.不听歌,不聊天,不吃东西,不喝饮料,头脑清醒,知道自己在做什么,要做什么. 写出步骤.连接到哪个数据库,ip是什么

Android开发之使用sqlite3工具操作数据库的两种方式

使用 sqlite3 工具操作数据库的两种方式 请尊重他人的劳动成果,转载请注明出处:Android开发之使用sqlite3工具操作数据库的两种方式 http://blog.csdn.net/fengyuzhengfan/article/details/40193123 在Android SDK的tools目录下提供了一"sqlite3.exe工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询. 管理数据库. 下面介绍两种方式: 第

MongoDB 运维常用操作

MongoDB 运维常用操作     分析方法:    1. 通过top.free.iostat.iftop等工具查看Linux服务器平均负载.CPU利用率.IO.内存.swap.网络流量等,先定位到压力源头. 2. 通过mongostat.mongotop等分析MongoDB读写压力.观察Page Faults.Connections.Queues等性能指标. 3. 日志中默认记录超过100ms的请求,过滤出Overflow查询,再使用Mtools跟踪分析MongoDB日志文件中的慢查询语句.