• [技术干货] mongoDB的简单使用
    mongoDB是一种使用起来最像关系型数据库的非关系数据库。mongoDB库下面是集合,而关系型数据库的库下面是表。1.查看mongoDB软件下有哪些库:show dbs;(命令不会显示空的数据库)2.查看用户当前连接的是哪个数据库:db;3.创建一个新的数据库:use 数据库名(如果数据库已经存在,则切换到某一数据库下;如果此数据库不存在,则创建此数据库。)4.删除数据库:db.dropDatabase();5.查看某一个数据库下面的所有集合:show tables;从上面的命令看,确实很像关系型数据库。
  • [技术干货] mongodb基本命令实例分享
    1 切换数据库use admin;2 查看当前数据库db;2.1 查看所有数据库show collections;3 查看当前数据库下面的表show collections;4 删除数据库use test; db.dropDatabase(); #删除当前数据库 show dbs; #验证删除结果5 删除集合或者表db.table_name.drop(); #删除表 table_name6 查看账号信息mongo --port=23000 use admin; db.auth('username','password') db.system.users.find().pretty() #查看所有账号信息 show users; #查看当前账号信息 db.getUser('username') #查看指定用户的信息 7 使用gzip压缩的方式备份与恢复,注意只要换个命令就行,后面的不变,这里没用设置用户名和密码mongodump --port=23000 --archive=/data/mongo_backup/testdb-2.20191203.gz --db testdb-2 --gzip mongorestore --port=23000 --archive=/data/mongo_backup/testdb-2.20191203.gz --db testdb-2 --gzip ** 这种备份方式生成一个gzip文件,解压后也是一个文件,将所有内容都放到一个文件里面 8 不压缩的方式备份mongodump --port=23000 --db=testdb-2 -o /data/mongo_backup/20191203 mongorestore --port=23000 --db=testdb-2 --drop /data/mongo_backup/20191203/testdb-2 **经过这种方式备份,每个表通常就两个文件:.bson和.metadata.json 9 在shell中使用mongo命令查询# 使用eval mongo ip:port/database --eval "" [root@localhost ~]# mongo localhost:23000/testdb-2 --eval "printjson(db.table1.findOne())" MongoDB shell version v3.6.13 connecting to: mongodb://localhost:23000/testdb-2?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("e87ef5ae-a6b7-47d6-a91c-65f3a0b81ac0") } MongoDB server version: 3.6.13 { "_id" : ObjectId("5de60a767321940034390f16"), "id" : 129, "name" : "hehe" } #使用--quiet 去掉不必要的信息 [root@localhost ~]# mongo localhost:23000/testdb-2 --quiet --eval "printjson(db.table2.findOne())" { "_id" : ObjectId("5de615b8eac07a724c6911b6"), "id" : 6, "name" : "hehe" } #删除表 [root@localhost ~]# mongo localhost:23000/testdb-2 --eval "db.table1.drop();" MongoDB shell version v3.6.13 connecting to: mongodb://localhost:23000/testdb-2?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("0cf5b11f-c6ef-417c-8bbd-a2f8414f589c") } MongoDB server version: 3.6.13 true 10 shell脚本中使用mongo命令#!/bin/bash mongo localhost:23000/testdb-2 <<EOF var cursor=db.table2.find(); while (cursor.hasNext()){ var item = cursor.next(); print(item.name); } EOF #传参的方式 #!/bin/bash table_name=$1 mongo localhost:23000/testdb-2 <<EOF var cursor=db.${table_name}.find(); while (cursor.hasNext()){ var item = cursor.next(); print(item.name); } EOF
  • [技术干货] 关于MongoTemplate通过id查询为null的问题
    Mongo的优势1. 它会把数据文件映射到内存中,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,总之可以大幅度提升性能。MongoDB并不干涉内存管理工作,而是把这些工作留给操作系统的虚拟内存管理器去处理,这样做的好处是简化了MongoDB的工作,但坏处是你没有方法很方便的控制MongoDB占多大内存,幸运的是虚拟内存管理器的存在让我们多数时候并不需要关心这个问题。2. MongoDB的内存使用机制让它在缓存重建方面更有优势,简而言之:如果重启进程,那么缓存依然有效配置:spring.data.mongodb.uri=mongodb://test:123456@${ipAddr}:27017/mrqc?connectTimeoutMS=10000&authSource=admin版本:<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>2.2.0.RELEASE</version> </dependency>错误实体类MongoId设置为了String,需要设置为ObjectId类型@Data @Document("user") public class User { @MongoId private String id; @Field("userName") private String userName; }正确实体类@Data @Document("user") public class User { @MongoId private ObjectId id; @Field("userName") private String userName; }查询语句,如果mongoId类型为String那么就查询不出来,无论是直接使用findById方法或者find(query)或者id传ObjectId对象,都是查不出来的,开始还以为配置错了,结果是因为Mongo的id都是ObjectId无法对应上实体类中的String类型。改成ObjectId同样的语句就可以查询出来了User user = mongoTemplate.findById(new ObjectId(userId),User.class, "user");
  • [技术干货] MongoDB 用户相关操作
    在我们第一次启动MongoDB的时候,仅仅是制定了data数据目录和log日志目录,并没有指定--auth选项,也就是并不需要认证。[root@VM-0-14-centos mongo_27017]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("61c35b47-f43b-48fc-a43e-066f56987e9a") } MongoDB server version: 4.0.6 > db test > show dbs; admin 0.000GB config 0.000GB local 0.000GB > use admin switched to db admin > show users; > db.system.user.find()我们第一次登录MongoDB的服务,输入db,发现当前数据库是test,但是show dbs却看不到test数据库,其实这个是MongoDB的一个特点,test是一个虚的数据库,想要看到test中的内容,你只需要给test数据库中插入一个文档即可。     接着,我们可以看到,当我们输入show users的时候,没有看到任何账号信息。接下来我们准备开启--auth参数来重启MongoDB服务,在重启之前,我们需要保证已经分配了新的账号,下面我们开始分配账号:> db.createUser({ user: "root", pwd: "123456", roles: [ { role: "root", db: "admin"} ]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }这里,我们可以看到,我们分配了一个账号:user:root     # 用户名pwd:123456 # 密码roles:root    # 角色db:admin     # 数据库角色root有必要做一下解释:Read: 允许用户读取指定数据库, readWrite:允许用户读写指定数据库 dbAdmin: 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 clusterAdmin: 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root: 只在admin数据库中可用。超级账号,超级权限创建好用户之后,我们重启MongoDB服务,在配置文件中打开--auth参数,或者直接在命令行里面指定auth参数,重新登陆:[root@VM-0-14-centos mongo_27017]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("5f2b0fa6-a1e3-4aaf-b43f-3525e19c33d2") } MongoDB server version: 4.0.6 > > use admin switched to db admin > show users 2020-10-28T23:42:06.127+0800 E QUERY [js] Error: command usersInfo requires authentication : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.getUsers@src/mongo/shell/db.js:1763:1 shellHelper.show@src/mongo/shell/utils.js:859:9 shellHelper@src/mongo/shell/utils.js:766:15 @(shellhelp2):1:1 > db.auth("root","123456") 1 > show users { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }可以看到,当我们第一次使用show users的命令查看用户的时候,系统拒绝了我们,显示:Error: command usersInfo requires authentication然后我们进行权限校验:use admindb.auth("root","123456")这下可以了。不知道大家有没有留意到一个细节,我们登陆的时候,使用mongo命令登陆的,然后进行用户认证,有没有一种方法可以直接在登陆的时候就进行用户认证呢?答案是有的。登陆方法一:mongouse admindb.auth("user":"password")
  • [问题求助] 【鲲鹏】【mongodb安装】一句话描述问题
    centos7.6 for arm 编译安装mongodb4.0.12时出现下面错误Compiling build/opt/mongo/db/auth/sasl_scram_test.oCompiling build/opt/mongo/db/auth/sasl_authentication_session_test.oLinking build/opt/mongo/db/query/command_request_response_testCompiling build/opt/mongo/transport/transport_layer_egress_init.oCompiling build/opt/mongo/client/mongo_uri_test.oGenerating library build/opt/mongo/transport/libtransport_layer_egress_init.aSkipping ranlib for thin archive build/opt/mongo/transport/libtransport_layer_egress_init.aCompiling build/opt/mongo/db/repl/oplog_buffer_collection_test.oCompiling build/opt/mongo/db/query/query_planner_geo_test.oLinking build/opt/mongo/client/mongo_uri_testLinking build/opt/mongo/db/auth/sasl_scram_testCompiling build/opt/mongo/db/query/query_planner_collation_test.ocollect2: error: ld returned 1 exit statusscons: *** [build/opt/mongo/db/auth/sasl_scram_test] Error 1scons: building terminated because of errors.build/opt/mongo/db/auth/sasl_scram_test failed: Error 1目前不知道是哪里的问题,求帮助
  • [技术干货] mongodb 配置安全验证
    mongodb挺好用的,存json数据方便。但默认安装后是不需要认证就可以直接连接,有点危险,下面就来配置mongodb的访问控制。系统环境:    OS:centos7.6其他信息:    mongodb server服务端下载地址:https://www.mongodb.com/try/download/community    mongodb shell客户端下载地址:https://www.mongodb.com/try/download/shell安装过程我就不写出来了,下载好rpm包到服务器直接用rpm 命令安装就行。1.启动mongodb服务systemctl restart mongod2.添加管理员账号#启动mongodb客户端 mongosh          #进入admin数据库 use admin #创建用户,user:用户名,pwd:密码,roles:角色 db.createUser({user: 'root', pwd: passwordPrompt(), roles: ['root']})3.关闭mongodb服务systemctl stop mongod4.设置开启访问控制启动#编辑mongodb服务 vi /usr/lib/systemd/system/mongod.service5.登录时验证#启动mongodb客户端 mongosh #进入admin数据库 use admin #进行身份验证,执行完后会提示输入密码 db.auth("root", passwordPrompt())如果需要在python使用带身份验证的mongodb,from pymongo import MongoClient # user:用户名,pwd:密码,server:服务器地址,port:服务端口,database:要连接的数据库 client = MongoClient('mongodb://user:pwd@server:port/database?authSource=admin')如果要修改密码请用这个命令db.changeUserPassword("user123", passwordPrompt())
  • [技术干货] 在OpenEuler上源码编译安装MongoDB
    这次以MongoDB 4.0.12为例演示如何在OpenEuler 20.03(LTS)编译安装。由于MongoDB 4.0.12安装需要不能少于50G磁盘剩余空间,请首先确认是否满足此条件。另外还需要执行以下基础组件安装:yum -y install libyaml libyaml-devel python-setuptools libcurl-devel python-devel gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel libpcap-dev*。如果上面安装过程无法识别,请参考“配置OpenEuler的网络yum源”,链接如下:https://bbs.huaweicloud.com/forum/thread-98091-1-1.html下面开始演示:1、  前置环境准备:cmake>=3.5.2;gcc>=7.3,对于openEuler20.03来说默认都是满足的。如下图所示:Cmake版本信息Gcc版本信息2、  安装MongoDB还需要依赖python和python相关模块,默认python2.7应该是默认已经安装成功的,如下图所示其他python组件信息如下表所示:软件名称及版本链接地址pyyamlhttps://github.com/yaml/pyyaml.gittypinghttps://github.com/python/typing.gitcheetah3https://github.com/CheetahTemplate3/cheetah3.gitA) 安装pyyaml下载pyyaml:git clone https://github.com/yaml/pyyaml.git进入pyyaml目录进项安装组件:B) 安装typing下载typing:git clone https://github.com/python/typing.git进入typing并开始安装:python setup.py installC) 安装cheetah3下载cheetah3:git clone https://github.com/CheetahTemplate3/cheetah3.git进入cheetah3安装 3、  MongoDB源码安装A) 下载MongoDB源码:wget https://github.com/mongodb/mongo/archive/r4.0.12.tar.gz【注意】下载速度可能有些慢,可以先通过下载工具完成下载,然后上传到服务器上B) 解压并安装:tar xzvf mongo-4.0.12.tar.gz,解压完成计入文件夹cd mongo-4.0.12C) 编译MongoDB源码:python2 buildscripts/scons.py MONGO_VERSION=4.0.12 all CFLAGS="-march=armv8-a+crc -mtune=generic" –j8 --disable-warnings-as-errors【注意】由于ECS的机器配置不能,编译的时间也是不定的D) 执行安装:python2 buildscripts/scons.py MONGO_VERSION=4.0.12 --prefix=/usr/local/mongo --disable-warnings-as-errors CFLAGS="-march=armv8-a+crc" install -j8E)  查看结果,通过上面截图可以看出安装目录位于:/usr/local/mongo/bin/目录中4、  验证:简单实用MongoDB,验证MongoDB是否可用A) 准备必要的文件和文件夹:B) 启动MongoDB服务端:C) 客户端登录:添加用户:添加数据并查询 
  • [问题求助] 【ESC产品】【安装mongoDB失败引发yum命令执行失败】
    【功能模块】【操作步骤&问题现象】1、安装mongoDB,中途更新python导致yum命令无法执行,显示python不兼容。2、依照网上的提示:更改 #!/usr/bin/python => #!/usr/local/bin/python2.73、但是还是报同样的错误【截图信息】There was a problem importing one of the Python modules required to run yum. The error leading to this problem was:No module named yumPlease install a package which provides this module, or verify that the module is installed correctly.It’s possible that the above module doesn’t match the current version of Python, which is:If you cannot solve this problem yourself, please go to the yum faq at:【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ESC产品】【安装mongodb】按照连接安装报错
    【功能模块】【操作步骤&问题现象】1、根据这个连接https://www.huaweicloud.com/kunpeng/software/mongodb.html安装2、到达第六步,执行报错:根据上面的安装步骤 6)    执行以下命令,构建编译环境。 scl enable devtoolset-7 "/usr/local/bin/pip2 install -r buildscripts/requirements.txt" 执行第六步以后,报了这个错: Failed to bulid cryptography ERROR Could not build wheels for cryptography which use PEP 517 and cannot be installed directly【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【ECS产品】【基础包安装】ECS登录安装mongodb报错
    【功能模块】【操作步骤&问题现象】1、通过yum install -y mongodb-org2、报错Error:Nothing todo3、通过二进制包安装提示:无法执行二进制文件【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 鲲鹏服务器搭建MongoDB编译环境失败
    系统:Linux ecs-arm-iot-0005 4.18.0-80.7.2.el7.aarch64 #1 SMP Thu Sep 12 16:13:20 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux文档:https://www.huaweicloud.com/kunpeng/software/mongodb.html我按照这个文档安装MongoDB,当构建编译环境:#scl enable devtoolset-7 "/usr/local/bin/pip2 install -r buildscripts/requirements.txt"发生了如下报错:
  • [问题求助] 鲲鹏服务器搭建MongoDB编译环境失败
    系统:Linux ecs-arm-iot-0005 4.18.0-80.7.2.el7.aarch64 #1 SMP Thu Sep 12 16:13:20 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux文档:https://www.huaweicloud.com/kunpeng/software/mongodb.html我按照这个文档安装MongoDB,当构建编译环境的时候发生了如下报错:#scl enable devtoolset-7 "/usr/local/bin/pip2 install -r buildscripts/requirements.txt"
  • [技术干货] 云图说 | 第198期 将源端MongoDB业务搬迁至华为云DDS的几种方式
    文档数据库DDS介绍页入口,详情请点击链接文档数据库DDS迁移指导入口, 详情请点击链接噔噔,新一期的数据库干货又来啦~如果您因业务调整或需要使用华为云文档数据库特性功能时,可以通过数据迁移功能将原有MongoDB数据库的数据迁移至华为云文档数据库。小云妹带来了几种不同的方式,一起来学习下 【往期回顾】●【第一期】华为云DDS-云上高性价比文档数据库服务●【第二期】小云妹之DDS实例安全基本操作●【第三期】文档数据库可视化运维 高频需求一键式便捷操作
  • [技术干货] MongoDB经典故障系列五| sharding集群执行sh.stopBalancer()命令时被卡住怎么办?
  • [问题求助] 8.14直播互动&amp;社区互动问题答疑总结
    Q1:GaussDB(for Mongo)在使用上和社区版MongoDB有什么不一样的地方?有哪些不兼容的地方需要注意?ANS:GaussDB(for Mongo)对社区版本完全兼容,不过出于安全和防呆的考虑,禁用了一部分高危命令。Q2:啥时候出GaussDB(for PgSQL)啊?ANS:非常开心的告诉大家,GaussDB(for PostgreSQL)已经在研发中,预计年底将在官网上跟大家见面,感兴趣的开发者届时可以来试用。Q3:话说,副本集是个什么形态?ANS:这是MongoDB基础概念,具体可以参考官方文档,或者在中文社区上搜索相关资料           https://docs.mongodb.com/manual/replication/           https://mongoing.com/Q4:从节点的个数变多会影响主节点的写性能吗?ANS:对于社区版来说,由于从节点需要从主节点拉去oplog,所以多增加主节点的压力,会影响写性能。对于GaussDB(for Mongo)来说则不会影响主节点的写性能。Q5:GaussDB(for Mongo) 最高支持MongoDB4.0协议版本,那么后续社区版4.2, 4.4的分布式事务等新特性,GaussDB(for Mongo)会持续跟进吗?ANS:后续社区上的新特性,GaussDB(for Mongo)都会在当前版本兼容起来.Q6:不同mongod的cache如何解决?ANS:每个Mongod的cache独立处理采用统一的策略,互相之间没有影响。Q7:for mongo是啥意思?ANS:即兼容Mongo协议、语法、生态。Q8:共享文件系统里面是以chunk为单位的?ANS:这里提到的是Mongo层的chunk,分片集合的数据就是通过chunk管理的,在balance过程中迁移的最小单元。Q9:不同shard双写同一个key如何解冲突?ANS:应该是想问不同的shard同时写一个共享的数据文件是如何解决冲突的。一个数据文件只会归属shard,通过文件系统层的写锁提供保证。Q10:GaussDB(for Mongo) ,GaussDB(for MySQL)、还有未见面的GaussDB(for PgSQL) 比原生的是否都有什么类似的改进,都加个GaussDB?ANS:GaussDB是华为云面向政企、金融客户打造的自研数据库,兼容开源生态,自主可控。在底层统一采用了存算分离架构,可以达到分钟级甚至秒级水平扩容,无论是存储节点,还是计算节点。各云服务还提供了许多特有的价值特性。您可以关注华为云数据库社区&论坛(https://developer.huaweicloud.com/techfield/db.html)和“HW云数据库”公众号,我们持续在输出精品文章、技术沙龙、学习课程、培训认证、产品文档、免费试用等。Q11:采用的是分布式存储方式吧?ANS:是的。Q12:水平扩展性能这么好,那单节点读写性能和社区版MongoDB相比,是否具有优势?ANS:在新架构上,对于单节点收益不大,所以不提供单节点。本身单节点的可靠性,高可用都是有问题的,所以即使使用社区版也不建议采用这种部署方式。Q13:单独的存储池,GaussDB数据只存了2份?ANS:GaussDB(for Mongo)数据在存储层是3副本。Q14:GaussDB相较于传统数据库,最大的优势是什么?ANS:计算存储分离,性能更好,相同的业务需求有更高的性价比,以及更快的弹性伸缩能力,更高的可用性。Q15:存算分离,容灾备份机制目前采用哪种方式最好?会增加建设成本吗?ANS:关于建设成本主要影响因素是容灾的具体方案,存算分离本身不增加额外的成本。Q16:突然掉电,能保证计算节点在掉电瞬间的的数据存储的完整性吗?ANS:文件系统层提供了这样的保证,计算节点掉电并不会损坏数据文件。Q17:安全策略上,与其他产品或方案最大的区别在哪里?ANS:在社区版本安全策略的基础上,增加禁止了高危命令,用户权限控制,密码策略等一系列加固手段。并且华为云统一提供VPC、子网等安全策略。Q18:副本集轻写,能达到什么写量级?ANS:8U实例纯写可以达到38000 ops。Q19:计算存储分离以后存储的时延是否变大了?ANS:与EVS的存储性能相比更优(更大吞吐更低时延),与本地盘相比时延略高。Q20:老师为什么叫GoldenJohn?ANS:1、谐音 2、为了闪闪发亮、高大上的GoldenQ21:副本集和热备容灾有多大的区别?ANS:副本集提供实例级别内的高可用,高可靠的能力。容灾提供实例级别的高可用和高可靠能力。前者实时性更好,倒换全自动不需要外部干预,故障恢复时间短,社区提供的基础能力。对于热备容灾来说,受传输影响大,无法自动接管需要人力介入。故障恢复时间相关更长。
总条数:165 到第
上滑加载中