前言

本文主要涉及一下内容:数据库的备份和恢复,对于任一数据库来说备份至关重要;数据的导入和导出;数据库修复;数据库状态监控工具mongostat;在使用过程遇到其他命令会总结在此。

1.数据库的备份和恢复

1.1 复制数据文件

备份:使用此方法时必须保证数据文件不发生变化,可以使用fsynclock命令,> db.fsyncLock()

一旦运行该命令,就会锁定数据库,禁止任何写入,并进行同步,把数据刷到磁盘。当命令返回后,就可以复制数据文件了,如备份名为myDB的数据库,只需复制所有名为myDB.*的文件,如果使用了—directoryperdb选项,只需复制该数据库对应的整个数据目录。复制完成后,使用> db.fsyncUnlock()解锁数据库。

注意:如果启用了身份验证,那么,在调用fsyncLock和fsyncUnlock期间不要关闭shell否则只能重启mongod服务了。

恢复:保证mongod服务没启动,待恢复目录为空,将备份的数据文件拷贝到数据库目录,最后启动mongod服务即可。

1.2 使用mongodump

使用mongodump可以单独备份数据库,集合,只不过备份和恢复的比较慢。可以使用mongodump –help查看可用选项。

备份:

备份整个foo数据库

mongodump –h 127.0.0.1:30000 –d foo –o /data/dbback/foo

备份foo数据库中的bar集合

mongodump –h 127.0.0.1:30000 –d foo –c foo.bar –o /data/dbback/foo/bar

备份多个集合,foo中的bar,info集合,mongodump一次只能备份一个集合,不能指定多个集合进行备份,倒是可以用 --excludeCollection和--excludeCollectionsWithPrefix两个参数排除不需要备份的集合。

可以使用shell脚本来实现一次备份多个集合。

恢复:

使用mongorestore命令,其中有两个选项值得一提:

--drop:在恢复前删除现有集合,否则直接插入现有集合中

--noobjcheck:忽略对象插入集合之前的验证步骤

恢复单个数据库

mongorestore –h 127.0.0.1:30000 –d foo –dir /data/dbback/foo

恢复单个集合

mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar –dir /data/dbback/foo/bar

恢复多个集合

mongorestore –h 127.0.0.1:30000 –d foo –c foo.bar,foo.infi –dir /data/dbback/foo /cols

1.3 备份副本集

直接使用复制数据文件的方式备份,这种方式备份副本集时无需做任何修改。

1.4 备份分片集群

第一步:关闭均衡器,sh.stopBalancer(),sh.getBalancerStatue() 查看均衡器状态

第二步:连接mongos执行mongodump备份

第三步:启用均衡器,sh.setBalancerState(true)

恢复备份的话,使用mongorestore连接到一个mongos执行即可

备份单个分片和备份单个服务器一样。

2.数据的导入和导出

数据导入导出就是两个命令:mongoimport和mongoexport

mongoimport,可以把CSV, TSV或者JSON格式的数据导入mongodb,其中几个有用的选项:

--headerline:对于CSV,TSV格式文件,使用第一行作为字段名称

--drop:导入前删除集合,否则追加集合后面

--ignoreblanks:不导入空字段

mongoimport –h 127.0.0.1:30000 –d foo –c foo.bar –type csv –headerline < csvfile

mongoexport,可以把mongodb数据导出JSON,CSV格式的文件。其中几个有用的选项:

--q:指定查询条件导出数据,默认为{}

--f:指定导出的字段名称

mongoexport –h 127.0.0.1:30000 –d foo –c foo.bar –q {} –type=csv > bar.csv

3.数据库状态监控

使用mongostat默认每一秒输出服务当前状态,输出主要字段说明表,使用方法mongostat –port 30000。

使用db.currentOp()可以查看数据库当前执行的操作有哪些。

4.用户的添加删除

Mongodb使用基于角色的访问控制(Role-Based Access Control)来管理数据库系统的访问,3.0默认使用的验证机制为SCRAM-SHA-1。

MongoDB内置的用户权限如下表:

4.1 添加用户及权限

1)创建管理员

创建一个管理员用户,用来管理其他用户

use admin
db.createUser(
 {
  user: "admin",
  pwd: "abc123",
  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
 }
)

2)创建一个多数据库权限用户

创建一个用户赋予它多个数据库的权限

use reporting
db.createUser({
    user: "reportsUser",
    ",
    roles: [
        { role: "read", db: "reporting" },
        { role: "read", db: "products" },
        { role: "read", db: "sales" },
        { role: "readWrite", db: "accounts" }
    ]
})

4.2 修改用户权限及密码

首先需要有 grantRole 和 revokeRole 的权限,查看用户的权限使用 viewRole,但也必须拥有查看权限的权限。

1)查看用户权限

查看reportsUser用户的拥有的角色

use reporting

db.getUser("reportsUser")

2)移除用户权限

移除reportsUser在accounts数据库的读写权限

use reporting
db.revokeRolesFromUser(
    "reportsUser",
    [
        { role: "readWrite", db: "accounts" }
    ]
)

3)授予用户权限

授予reportsUser在accounts数据库的读权限

use reporting
db.grantRolesToUser(
    "reportsUser",
    [
        { role: "read", db: "accounts" }
    ]
)

注意:对于分片集群修改用户权限,若有多个mongos实例,在一个修改后,其它的需等待10分钟才刷新缓存

4)修改用户密码

将reporting用户的密码修改为1234

db.changeUserPassword("reporting", "1234")

4.3 删除用户

db.dropUser("userName")

MongoDB-服务器管理的更多相关文章

  1. window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置

    最近公司有一个项目模块让用nosql-mongodb替换了,故,对mongodb做了一点研究,然后分享一下! 1.首先说一下安装时的坑 下载mongodb,如果你从官网下载,将会是一件很慢的事情,在公 ...

  2. MongoDB 分片管理(三)服务器管理

    MongoDB 分片管理(三)服务器管理

  3. MongoDB的客户端管理工具--nosqlbooster 连接MongoDB服务器

    nosqlbooster的官网地址为https://nosqlbooster.com.大家如果想直接下载,可以登入下载网址https://nosqlbooster.com/downloads. 下载w ...

  4. MongoDB基本管理命令

    MongoDB是一个NoSQL数据库系统:一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表:而每个集合中 可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由 ...

  5. NoSQL学习二:MongoDB基本管理命令

    MongoDB命令学习  一.MongoDB命令帮助 在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控: 这是MongoDB最上层 ...

  6. 最佳的MongoDB客户端管理工具

    <最佳的MongoDB客户端管理工具> 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一个好的MongoD ...

  7. MongoDB账号管理及实践

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 目前蜂巢(云计算基础服务)MongoDB上已经有数十个实例,其中不少是企业用户或公司内部产品用户的.用户多了 ...

  8. Mongodb账户管理

    Mongodb账户管理   介绍 Mongodb是一个schema free的非sql类分布式数据库,可以利用它做很多很灵活的存储和操作,最近了解了下它的账户机制,通过设置auth启动方式可以对所有登 ...

  9. MongoDB的管理-深度长文

    (1) 启动和停止MongoDB: Ubuntu18下启动关闭MongoDB 启动MongoDB: 方法一: systemctl start mongod.service 方法二: 在MongoDB的 ...

  10. 在亚马逊amazon的AWS上安装Node和MongoDB服务器

    在亚马逊amazon的AWS上安装Node和MongoDB服务器 在建立AWS上账号.创建EC2 ,用putty链接上之后,就可以用下面的方法开始安装. !!! 如果不是是自己建立的EC2, 而是由B ...

随机推荐

  1. Objective-C中的继承和多态

    面向对象编程之所以成为主流的编程思想和他的继承和多态是分不开的,只要是面向对象语言都支持继承和多态,当然不同的OOP语言之间都有其特点.OC中和Java类似,不支持多重继承,但OOP语言C++就支持多 ...

  2. linux下的常用命令

    1 fg切换前后台作业 将后台作业转换为前台作业,”fg %作业号“ 2 stty改变和打印终端行设置 tostop 阻止后台作业写终端,stty -a显示终端的所有选项 3 uname查看机子信息 ...

  3. js实现无限极分类

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...

  4. Mybatis 入门 -- 最简单的引入和使用

    参考:http://www.mybatis.org/mybatis-3/zh/getting-started.html 从今天开始学习官方文档. 1.项目搭建 项目结构: 首先,搭建一个maven项目 ...

  5. mybatis入门基础(九)----逆向工程

    一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...

  6. CSS3 media queries + jQuery实现响应式导航

    目的: 实现一个响应式导航,当屏幕宽度大于700px时,效果如下: 当屏幕宽度小于700px时,导航变成一个小按钮,点击之后有一个菜单慢慢拉下来: 思路: 1.为了之后在菜单上绑定事件,并且不向DOM ...

  7. 分享我基于NPOI+ExcelReport实现的导入与导出EXCEL类库:ExcelUtility (续3篇-导出时动态生成多Sheet EXCEL)

    ExcelUtility 类库经过我(梦在旅途)近期不断的优化与新增功能,现已基本趋向稳定,功能上也基本可以满足绝大部份的EXCEL导出需求,该类库已在我们公司大型ERP系统全面使用,效果不错,今天应 ...

  8. Python_Day_05 计数器(counter),有序字典(OrderDict),默认字典(defaultdict),可命名元祖(namedtuple),双向队列(deque),单项队列(deuqe.Queue)

    Counter(计数器) 是一个字典的子类,存储形式同样为字典,其中存储的键为字典的元素,值为元素出现的次数,在使用之前我们需要先导入文件 import collections 初始化一个计数器 im ...

  9. 【原创】kafka server源代码分析(一)

    这个是Kafka server的核心包,里面的类也很多,我们还是一个一个分析 一.BrokerStates.scala 定义了目前一个kafka broker的7中状态 ——  1. NotRunni ...

  10. jQuery网页版五子棋小游戏源码下载

    体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...