docker pull mongo
docker run --name mongodb -p 27017:27017 -v /mydata/mongodb/data:/data/db -d mongo --auth
# --name :指定容器名
# -p :指定容器暴露端口,宿主機端口:容器內(nèi)端口
# -v :指定容器存儲卷,宿主機目錄:容器內(nèi)目錄
# -d :設(shè)置容器為后臺運行,后面的mongo為鏡像名
# --auth :開啟密碼授權(quán)訪問
docker ps # 查看剛創(chuàng)建的容器
[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:允許用戶讀取指定數(shù)據(jù)庫
readWrite:允許用戶讀寫指定數(shù)據(jù)庫
dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫里創(chuàng)建、刪除和管理用戶
clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復(fù)制集相關(guān)函數(shù)的管理權(quán)限。
readAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限
readWriteAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限
userAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限
dbAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限。
root:只在admin數(shù)據(jù)庫中可用。超級賬號,超級權(quán)限
mongo備份還原
1,docker exec -it <你的MongodDB容器名> /bin/bash
2,容器中執(zhí)行
mongodump -h 127.0.0.1 --port 27017 -u=用戶名 -p=密碼 -d test -o /dump
| 參數(shù) | 作用 | |
| -h | host | |
| --port | 端口 | |
| -d | 指定數(shù)據(jù)庫 | |
| -o | 指定備份到哪個目錄,不指定應(yīng)該是直接備份到根目錄的/dump文件夾 | |
| -u | 用戶名 | |
| -p | 密碼 |
系統(tǒng)備份成功會在/home/dump目錄下自動生成一個數(shù)據(jù)庫名的文件夾/test,里面是全部Collection備份的bson文件
3,容器中執(zhí)行 tar -zcvf test.tar.gz /dump/test
4,從容器復(fù)制到宿主
docker cp <你的MongodDB容器名>:/dump/test.tar.gz /home
5,從宿主機到容器
1)進入docker mongodb容器:docker exec -it mymongo /bin/sh
2)在docker容器新建mongodb數(shù)據(jù)要導(dǎo)入的目錄,mkdir -p /opt/mongodbBack/
3)docker cp linux備份mongodb的數(shù)據(jù)文件(不是文件夾) 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--------------------------
單數(shù)據(jù)源
spring.data.mongodb.field-naming-strategy=org.springframework.data.mapping.model.SnakeCaseFieldNamingStrategy
多數(shù)據(jù)源
@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();
//下劃線轉(zhuǎn)駝峰
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));
}
}
}
浙公網(wǎng)安備 33010602011771號