• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
lvym
博客园    首页    新随笔    联系   管理    订阅  订阅
mongodb---docker

 

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      

        mongorestore -h IP:port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
        --drop:先删除所有的记录,然后恢复.【drop慎用】
       docker exec -it <containerName>/<containerId>  mongorestore -h IP:port 端口 -u 用户名 -p 密码 -d 数据库 --drop 文件存在路径
        # 执行命令恢复   
         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));
        }
    }
}

 

 
posted on 2021-06-04 16:17  lvym777  阅读(126)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3