1:先去部署一个mongodb,根据镜像仓库情况进行选择。这里直接上docker-compose部署。
mongodb.yml
version: "3"
services:
mongodb:
image: ip:port/public/mongo #所有仓库地址
container_name: mongodb
environment:
MONGO_INITDB_DATABASE: test
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: test
ports:
- "27017:27017"
volumes:
- test_data:/data/db
volumes:
test_data:
2:在该docker-compose文件的当前目录执行:docker-compose -f mongodb.yml up -d(指定运行的文件,运行的方式)
3:建立集合:
一般默认的账号密码会写在portina里面的环境变量里面。
root test 这个是对应这admin这个库。
进入启动的容器,切换到admin库。
use admin 这里切换到了admn库
然后进行鉴权 db.auth(“root”,”test”)
鉴权后可以show dbs 查看有哪些库,show users查看有哪些用户。
注意:我们的业务库是在custom库,初始的mongodb中没用这个库。需要我们建立一个。
> use custom
switched to db runoob
> db
custom
>
这里就建立了一个custom库,但是库里面没用任何数据,我们用show dbs命令看不到,这时候我们要插入一条数据进去,才能看到数据库
custom库建立了,但是我们的root test账密还是登不进去。
进入custom库,用show users发现没有custom库的角色,那我们切入到custom库下面,执行:注意冒号后要空格
db.createUser(
{
user: "test",
pwd: "test,
roles: [
{ role: "readWrite", db: "cmdb" },
{ role: "dbAdmin", db: "cmdb" }
]
}
)
上面不行再切到admin库执行下面命令
db.createUser({user:"test",pwd:"test",roles:[{"role":"userAdminAnyDatabase","db":"admin"},{"role":"readWrite","db":"custom"}]})
这个角色就能读写和管理集合
4:custom数据库建好之后,开始数据迁移:
Mongo迁移有几种方式,推荐export import 导出+导入 以json文件的形式
熟练的可以用store等方式备份还原。
导出
mongoexport --host 127.0.0.1 -u root -p test --db custom --collection data -o data.json --authenticationDatabase admin
导入
mongoimport --host 127.0.0.1 -u root -p test --db data --collection data --file data.json --authenticationDatabase admin
注意: --collection参数里的集合,需要与导出文件的集合相对应。 这个需要逐一对应。导错了就要去命令行,切换到要删除的库,然后db.dropDatabase()
说明:mongodb
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、4. clusterMonitor、hostManage;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
内部角色:__system
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限