docker pull mongo
docker run --name mongodb -p 27017:27017 -v /mydata/mongodb/data:/data/db -d mongo --auth
# --name :指定容器名
# -p :指定容器暴露端口,宿主机端口:容器内端口
# -v :指定容器存储卷,宿主机目录:容器内目录
# -d :设置容器为后台运行,后面的mongo为镜像名
# --auth :开启密码授权访问
docker ps # 查看刚创建的容器
[root@myhost ~]# docker exec -it mongodb mongo admin
> db.createUser({ user:'liuwei',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
Successfully added user: {
"user" : "liuwei",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
"readWriteAnyDatabase"
]
}
> db.auth('liuwei', '123456')
1
>
---------------------看起来比较好-------------------
[root@localhost ~]# docker run -d -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 -v /mydata/mongodb/data:/data/db mongo
docker exec -it mongodb mongo admin
db.auth("admin","123546)
db.createUser({ user:'liuwei',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
mongo备份还原
1,docker exec -it <你的MongodDB容器名> /bin/bash
2,容器中执行
mongodump -h 127.0.0.1 --port 27017 -u=用户名 -p=密码 -d test -o /dump
参数 | 作用 | |
-h | host | |
--port | 端口 | |
-d | 指定数据库 | |
-o | 指定备份到哪个目录,不指定应该是直接备份到根目录的/dump文件夹 | |
-u | 用户名 | |
-p | 密码 |
系统备份成功会在/home/dump目录下自动生成一个数据库名的文件夹/test,里面是全部Collection备份的bson文件
3,容器中执行 tar -zcvf test.tar.gz /dump/test
4,从容器复制到宿主
docker cp <你的MongodDB容器名>:/dump/test.tar.gz /home
5,从宿主机到容器
1)进入docker mongodb容器:docker exec -it mymongo /bin/sh
2)在docker容器新建mongodb数据要导入的目录,mkdir -p /opt/mongodbBack/
3)docker cp linux备份mongodb的数据文件(不是文件夹) mymongo(容器名称或id):/opt/mongodbBack/
6,还原备份
进入docker mongodb容器:docker exec -it mymongo /bin/sh
docker exec -it mymongo mongorestore -h 127.0.0.1:27017 -u admin -p admin123456 -d admin --dir /data/backup/admin
---------------------------------springboot--------------------------
单数据源
spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
多数据源
@Configuration public class EcgMongodbDatasource { @Primary @Bean(name = "ecgMongodbProperties") @ConfigurationProperties(prefix="spring.data.mongodb.testmongodb") public MongoProperties ecgMongodbProperties() { return new MongoProperties(); } @Primary @Bean(name = "ecgMongodbTemplate") public MongoTemplate ecgMongodbTemplate(){ MongoDbFactory mongoDbFactory=new SimpleMongoClientDbFactory(ecgMongodbProperties().getUri()); DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory); MongoMappingContext mongoMappingContext=new MongoMappingContext(); //下划线转驼峰 mongoMappingContext.setFieldNamingStrategy(new SnakeCaseFieldNamingStrategy()); MongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver,mongoMappingContext); return new MongoTemplate(mongoDbFactory,mongoConverter); } }
不添加class字段在文档库
@Configuration public class ApplicationReadyListener implements ApplicationListener<ContextRefreshedEvent> { @Resource MongoTemplate mongoTemplate; @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { MongoConverter converter = mongoTemplate.getConverter(); if (converter.getTypeMapper().isTypeKey("_class")) { ((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null)); } } }