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
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    erlang使用gen_server实现质数服务器(手打代码,还debug了几个错误)
    Java
    某个数组,通过交换使所有奇数都在前半所有偶数都在后半,复杂度O(N)。
    Mybatis映射文件完整模板参照
    Spring集成MyBatis
    jdbc hibernate myBatis比较
    MySQL的简单使用-(一)
    jQuery框架Ajax常用选项
    POI操作Excel的API注意点总结
    Java反射机制练习
  • 原文地址:https://www.cnblogs.com/cwane/p/5520456.html
Copyright © 2011-2022 走看看