zoukankan      html  css  js  c++  java
  • MongoDB-服务器管理

    前言

          本文主要涉及一下内容:数据库的备份和恢复,对于任一数据库来说备份至关重要;数据的导入和导出;数据库修复;数据库状态监控工具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",
        pwd: "12345678",
        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")

     

    作 者:创心coder
    QQ群:361982568
    订阅号:cxcoder
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    ActiveMQ 即时通讯服务 浅析
    Asp.net Mvc (Filter及其执行顺序)
    ActiveMQ基本介绍
    ActiveMQ持久化消息的三种方式
    Windows Azure Virtual Machine (27) 使用psping工具,测试Azure VM网络连通性
    Azure China (10) 使用Azure China SAS Token
    Windows Azure Affinity Groups (3) 修改虚拟网络地缘组(Affinity Group)的配置
    Windows Azure Storage (22) Azure Storage如何支持多级目录
    Windows Azure Virtual Machine (26) 使用高级存储(SSD)和DS系列VM
    Azure Redis Cache (2) 创建和使用Azure Redis Cache
  • 原文地址:https://www.cnblogs.com/cwane/p/5520456.html
Copyright © 2011-2022 走看看