mongodb从2.6迁移到3.0过程

首发于 搞起博客mongodb

总共有这么几个问题须要解决:
1. mongodb3.0版本的二进制包
1. wiredTiger引擎的配置
1. 数据的迁移
1. 权限数据库

mongodb3.0的二进制包

这个就不用多说了,直接去官网选择对应的系统下载就好
https://www.mongodb.org/downloads
我是centos 6.3,对应的发行版貌似是redhat6.x,因此选择的redhat6 64bitcentos

wiredTiger引擎的配置

官方给的例子是以yaml形式写的配置,我仍是以conf文件形式,因此就在后面追加了一个选项就能够了。固然我是重建的库路径,若是原有的数据路径的话,启用wiredTiger是会报错的。这就是下面要说的一个部分。数组

dbpath=/your/data/path
logpath=/your/log/path
logappend=true
bind_ip = 127.0.0.1
auth = true
port = 27017                                                                                                                                           
journal = true
#fork=true
storageEngine=wiredTiger

数据的迁移

因为须要换引擎,因此原来的数据不能直接使用了,必须使用monogodumpmongorestore两个工具来迁移数据。
具体操做能够参见这篇文章
经过mongodump和mongorestore实现Mongodb备份和恢复app

权限

那么将数据导入以后,若是须要设置权限的话,首先是须要admin库中建立一个user的,仍是先把auth=true给注释掉了,建立个用户,到这里懵逼了一下,提示addUser方法错误,查了一下发现,3.0的用户及权限有些改变。工具

定义

建立一个数据库新用户用db.createUser()方法,若是用户存在则返回一个用户重复错误。ui

语法

db.createUser(user, writeConcern)
* user这个文档建立关于用户的身份认证和访问信息;
* writeConcern这个文档描述保证MongoDB提供写操做的成功报告。rest

· user文档,定义了用户的如下形式:日志

{ user: "<name>",
  pwd: "<cleartext password>",
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ]
}

user文档字段介绍:

  • user字段,为新用户的名字;
  • pwd字段,用户的密码;
  • cusomData字段,为任意内容,例如能够为用户全名介绍;
  • roles字段,指定用户的角色,能够用一个空数组给新用户设定空角色;
    在roles字段,能够指定内置角色和用户定义的角色。

Built-In Roles内置角色

1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 全部数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root  
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
PS:关于每一个角色所拥有的操做权限能够点击上面的内置角色连接查看详情。

writeConcern文档 官方说明

  • w选项:容许的值分别是 一、0、大于1的值、"majority"、;
  • j选项:确保mongod实例写数据到磁盘上的journal(日志),这能够确保mongd之外关闭不会丢失数据。设置true启用。
  • wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。

例如:在products数据库建立用户accountAdmin01,并给该用户admin数据库上clusterAdmin和readAnyDatabase的角色,products数据库上readWrite角色。code

use products
db.createUser( { "user" : "accountAdmin01",
                 "pwd": "cleartext password",
                 "customData" : { employeeId: 12345 },
                 "roles" : [ { role: "clusterAdmin", db: "admin" },
                             { role: "readAnyDatabase", db: "admin" },
                             "readWrite"
                             ] },
               { w: "majority" , wtimeout: 5000 } )

以上是新版本用户、角色、权限的一些说明。

看看咱们如今要作的:
先建立个管理员

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

再建立咱们应用库的用户

use appdb
db.createUser(
 {
   user: "luoyjx",
   pwd: "12345678",
   roles: [
      { role: "readWrite", db: "appdb" }
   ]
 }
)

使用db.auth(username,pwd)能够验证一下

建立用户大概到这里了,建立完admin,再建立一个普通用户就基本OK了。

到这里,单实例的mongodb从2.6迁移到3.0就基本完成了。

TODO

副本集(没有折腾)

相关文章
相关标签/搜索