• [openEuler] 「openEuler 简明指南」openEuler 部署 MongoDB 数据库
    # MongoDB 数据库 > 提示 > > 可能前往 [openEuler 简明指南](#) 可以获得更加良好的阅读体验。 > ### 不知细叶谁裁出,二月春风似剪刀 > > 这一小节我们将讨论如何在 openEuler 上部署 MongoDB 数据库。 ## MongoDB 环境要求 | 属性 | 说明 | | :------: | :------------------------------: | | OS | openEuler 20.03 (LTS-SP1) 或更高 | | CPU 架构 | x86_64 / aarch64 | ![neofetch.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/23/000048noyi4kkmpfxeygnz.png) 目前 MongoDB 官方没有提供 openEuler 的 RPM 包或二进制压缩包,需要我们从源码编译安装。 需要说明的是 openEuler 20.03 (LTS-SP1) 的 GCC 版本过低,需要手动编译升级。而更高版本的 openEuler 的安装过程除此之外是完全一样的。 ## 了解 MongoDB 数据库 [MongoDB](#) 是由 MongoDB Inc.(当时是 10gen 团队)于 2007 年 10 月开发,2009 年 2 月首度推出的非关系型数据库,是通用、基于文档的分布式数据库。 ## 安装 MongoDB 数据库 ### 1. 下载安装文件 1. 打开 [MongoDB 下载页面](#) > `Version`(版本)选择 `5.0.0` > `Platform`(平台)选择 `Source (tgz)`(源码)> 点击 `Download`(下载)或 `Copy Link`(复制下载链接)后通过 `wget` 下载: ![download-1.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/2219543rszghtfzmc6c7gy.png) 2. 解压源码压缩包 `mongodb-src-r5.0.0.tar.gz`: ```sh tar -xf mongodb-src-r5.0.0.tar.gz -C /usr/local/ ``` ### 2. 安装编译所需依赖 由于 MongoDB 官方没有提供 openEuler 的二进制压缩包,所以需要自行编译。 按照官方文档的要求和系统的,编译 MongoDB 需要以下依赖: - GCC 8.2 或更新 - libcurl-devel - Python 3.7.x 和 Pip 模块 - openssl-devel 1. 检查依赖版本: ```sh gcc --version # 需要更新(openEuler 20.03 (LTS-SP1) 需要,更新 openEuler 版本不需要) python3 --version # 符合要求 pip3 --version # 符合要求 ``` ![required-1.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222009gpvutp2tmowhyaf9.png) 2. 安装相关依赖: ```sh sudo dnf install libcurl-devel scons ``` ![required-2.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/22202100w7g9wvxkybdbdc.png) 3. 打开 [GCC 镜像列表](#) > 选择一个镜像站: ![required-3.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/2220327mbyw1ormmlysaz4.png) 4. 以霓虹这个镜像站为例,点击 `release` > `gcc-11.1.0` > 点击 `gcc-11.1.0.tar.gz` 下载 GCC 源码: ![required-4.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222043bcesnziazrlb2vkr.png) ![required-5.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222055cz6pcozuak26vot8.png) 5. 解压源码压缩包 `gcc-11.1.0.tar.gz` 到 `/usr/local/` 目录: > 提示 > > 以下命令请在 root 用户下执行: > > ```sh > su - root > ``` ```sh tar -xf gcc-11.1.0.tar.gz -C /usr/local/ cd /usr/local/gcc-11.1.0 # 切换到解压目录 ``` 6. 执行以下指令以下载安装 GCC 所需要的依赖包(如 gmp、mpfr、mpc 等): ```sh ./contrib/download_prerequisites ``` > 提示 > > 执行此命令需要确保系统安装了相关依赖,否则使用以下命令安装: > > ```sh > dnf install bzip2 wget > ``` ![required-6.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222147smehut4xlwvmvqwx.png) 7. 手动创建一个目录,用于存放编译 GCC 源码包生成的文件: ```sh mkdir /usr/local/gcc-build-11.1.0 cd /usr/local/gcc-build-11.1.0 ``` 8. 由于 GCC 编译器支持多种编程语言的编译,而实际情况中我们可能只需要编译 C 和 C++ 两种编程语言,故需要进行配置: ```sh ../gcc-11.1.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib ``` ![required-7.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222205akycarveg3mfcw53.png) 同时会生成 `Makefile` 和相关文件: ![required-8.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222215mg9pouogvwb9pcvl.png) 9. 使用 `make` 命令编译 GCC: ```sh make ``` > 提示 > > 此过程将非常耗时(2 小时或更长)。若使用 SSH 远程连接请务必配置并使用不间断会话服务,具体操作请参阅 [3. 不间断会话服务配置](#)。 ![required-9.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/2222404xnxvhtxozwxo3mj.png) 10. 执行以下命令安装 GCC: ```sh make install ``` 11. 重启计算机,查看 GCC 版本信息: ```sh reboot gcc --version ``` ![required-10.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222253omdz1puf2oreyvh6.png) 12. 安装 Python 相关模块: ```sh cd /usr/local/mongodb-src-r5.0.0 python3 -m pip install -r etc/pip/compile-requirements.txt ``` ![required-11.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222306vzijgtl54doktyhd.png) ### 3. 编译 MongoDB 执行以下命令: ```sh cd /usr/local/mongodb-src-r5.0.0 python3 buildscripts/scons.py DESTDIR=/usr/local/mongo install-core --disable-warnings-as-errors ``` > 提示 > >此过程将非常耗时(2 小时或更长)。若使用 SSH 远程连接请务必配置并使用不间断会话服务,具体操作请参阅 [3. 不间断会话服务配置](#)。 当输出 `scons: done building targets.` 说明编译成功: ![build.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222327rmekymvwfb8jozll.png) ### 4. 配置 MongoDB 编译并安装 MongoDB 后,还需要做一些环境变量以及目录权限相关的配置。 > 提示 > > 以下命令请在需要管理 MongoDB 的用户下执行。 > > 可以事先创建管理 MongoDB 的用户。 #### 4-1. 设置环境变量 1. MongoDB 的可执行文件位于 `/usr/local/mongo/bin` 目录下,可将其添加到 `PATH` 路径中: ```sh vim ~/.bash_profile ``` ```sh export PATH=/usr/local/mongodb/bin:$PATH ``` ![cfg-1.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222353gtjhvwzb1dczovvp.png) 2. 重新登录,验证效果: ```sh echo $PATH ``` ![cfg-2.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/2224048r8i681weichb8pn.png) #### 4-2. 配置目录 默认情况下 MongoDB 启动后会初始化以下两个目录: - `/var/lib/mongodb` —— 数据存储目录 - `/var/log/mongodb` —— 日志文件目录 在启动前可以先创建这两个目录并设置当前用户有读写权限: ```sh sudo mkdir -p /var/lib/mongo sudo mkdir -p /var/log/mongodb sudo chown `whoami` /var/lib/mongo # 设置权限 sudo chown `whoami` /var/log/mongodb # 设置权限 ``` ![cfg-3.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222418b0rwgejdpnatbxyj.png) ## 启停 MongoDB 数据库 1. 使用以下命令启动 MongoDB: ```sh mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork ``` ![start-1.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222429oiqsk0cl6fmoggds.png) 2. 使用以下命令进入 MongoDB 后台管理 Shell: ```sh mongo ``` ![start-2.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222440xbvbbgeabwof73i2.png) MongoDB Shell 是 MongoDB 自带的交互式 JavaScript Shell,用来对 MongoDB 进行操作和管理的交互式环境。可执行一些简单的算数运算: ![start-3.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222453ydrfqql6xhe4gchh.png) 3. 使用以下命令关闭 MongoDB: ```sh mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --shutdown ``` ![start-4.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/22/222503t3rqn2pzvokarn45.png) ## 接下来... 恭喜!你已经成功在 openEuler 上部署了 MongoDB。如果您是初学者,可以由此开始学习操作 MongoDB;如果您已经对 MongoDB 非常熟悉了,相信您很快就可以完成其它的配置以及项目的部署。 未经特殊说明,本作品采用 [知识共享署名-相同方式共享 4.0 国际许可协议](#) 进行许可。
  • [问题求助] centos7.4 arm鲲鹏云主机安装mongodb出现问题
    反复部署了多个版本的mongodb数据库,在利用mongod启动时,出现-bash: ./mongo: cannot execute binary file的错误,网上找了很多资料无法解决。
  • [问题求助] 鲲鹏架构 arm服务器中安装mongodb的问题
    按照社区的技术方案进行安装https://bbs.huaweicloud.com/forum/thread-105570-1-1.html安装完成后,无法启动:/home/smartpm/soft/mongodb-4.4.3/bin/mongod: 无法执行二进制文件 按如下方法安装的:
  • [问题求助] 系统是麒麟V10 求一个编译安装mongodb 4.0.12的文档
    【功能模块】KylinOS | Kylin Linux Advanced Server (Kunpeng) V10   服务器鲲鹏系列 系统是麒麟V10  求一个完整编译安装 mongodb 4.0.12 的文档 谢谢【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术讨论] 鲲鹏-MongoDB-4.4.1迁移
    迁移环境虚拟机服务器 KVM Virtual Machine 虚拟机配置:aarch64架构 、 32G内存 、 16核 、300G磁盘空间 虚拟机操作系统: Linux version 4.19.90-2009.3.0.0045.up1.uel20.aarch64 (abuild@armbuild-02) (gcc version 7.3.0 (GCC)) #1 SMP Sun Oct 11 16:12:59 UTC 2020 软件版本:mongodb-4.4.1 版本获取方式https://github.com/mongodb/mongo/archive/r4.4.1.tar.gz   参考编译指南和问题https://support.huaweicloud.com/prtg-kunpengdbs/kunpengdbs_02_0004.html mongodb4.4.1的版本依赖gcc 8.2以上, Python 3.7.x、编译相关依赖:CMake 通过yum install cmake 安装Cython、pyyaml、typing、cheetah3  通过 python3 setup.py install 方式安装 gcc升级到8.2wget http://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.gztar -C /usr/local -xzf gcc-8.2.0.tar.gzcd /usr/local/gcc-8.2.0./contrib/download_prerequisites mkdir build cd build ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilibyum groupinstall "Development Tools" make -j16#这个步骤非常耗时长make install  修改 /etc/profile 添加如下命令:export PATH=/usr/local/bin:$PATH使配置生效source /etc/profile gcc -v  查看版本号就变成8.2了 如果需要完全替代本地的gcc进行如下操作,(以下操作不影响编译):{find / -name "libstdc++.so*"输出如下(最新动态库的目录)/usr/local/gcc-8.2.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25/usr/local/gcc-8.2.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6/usr/local/gcc-8.2.0/build/ /usr/local/gcc-8.2.0/build/stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so复制最新动态库文件libstdc++.so.6.0.25到/usr/lib64下cp /usr/local/gcc-8.2.0/build/ stage1-aarch64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25 /usr/lib64复制后,修改系统默认动态库的指向,即:重建默认库的软连接。切换工作目录至/usr/lib64:cd /usr/lib64删除原来软连接rm -rf libstdc++.so.6将默认库的软连接指向最新动态库:ln -s libstdc++.so.6.0.25 libstdc++.so.6默认动态库升级完成。重新运行以下命令检查动态库:strings /usr/lib64/libstdc++.so.6 | grep GLIBCgcc -v 查看版本号就变成8.2了 }编译报错Do not know how to make File target ‘all’按照迁移文档中的编译命令会出现如下错误: 原因是r4.4.1版本中scans已经没有定义all标签了,以下是编译mongod模块命令:python3 buildscripts/scons.py install-mongod  MONGO_VERSION=4.4.1 CFLAGS="-march=armv8-a+crc -mtune=generic" -j 16  --disable-warnings-as-errors  编译完成后可以在: /build/install 查看到已编译完成的文件,如果编译和安装一起,命令参考安装问题中的安装命令。 如果需要编译其他模块,install-mongod可修改成如下: install-mongodinstall-mongosinstall-mongoor install-shellinstall-servers(includes mongod and mongos)install-core(includes mongod, mongos, mongo)install-allinstall-all-meta (includes   mongod, mongo, unit tests, etc)其中如果编译(mongod, mongos, and mongo)中的一个模块的话推荐20G以上的磁盘空间,如果编译install-all-meta 推荐300G以上 ,如果install-all推荐600G以上的磁盘空间。 No module named ‘psutil’  安装如下依赖:yum install python3-develpip3 install psutil ssl依赖不存在 安装如下依赖:yum install openssl-devel  安装问题按照迁移文档中的安装命令会出现如下错误:  原因是r4.4.1版本中scans已经没有定义install标签了,以下是安装mongod模块命令: python3 buildscripts/scons.py MONGO_VERSION=4.4.1 DESTDIR=/ PREFIX=/usr/local/mongo --disable-warnings-as-errors CFLAGS="-march=armv8-a+crc" install-mongod -j 16 表示安装到/usr/local/mongo目录下。其他模块修改install-mongod即可。 
  • [技术干货] mongodb driver使用代码详解
    环境准备创建工程,并添加以下依赖:<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver</artifactId> <version>3.10.1</version> </dependency>2 使用mongodb-driver2.1 查询所有@Test public void test1() { //创建连接 MongoClient client = new MongoClient("192.168.200.128"); //打开数据库 MongoDatabase commentdb = client.getDatabase("commentdb"); //获取集合 MongoCollection<Document> comment = commentdb.getCollection("comment"); //查询 FindIterable<Document> documents = comment.find(); //查询记录获取文档集合 for (Document document : documents) { System.out.println("_id:" + document.get("_id")); System.out.println("内容:" + document.get("content")); System.out.println("用户ID:" + document.get("userid")); System.out.println("点赞数:" + document.get("thumbup")); } //关闭连接 client.close(); } } 2.2 根据_id查询每次使用都要用到MongoCollection,进行抽取:private MongoClient client; private MongoCollection<Document> comment; @Before public void init() { //创建连接 client = new MongoClient("192.168.200.128"); //打开数据库 MongoDatabase commentdb = client.getDatabase("commentdb"); //获取集合 comment = commentdb.getCollection("comment"); } @After public void after() { client.close(); } @Test public void test2() { //查询 FindIterable<Document> documents = comment.find(new BasicDBObject("_id", "1")); //查询记录获取文档集合 for (Document document : documents) { System.out.println("_id:" + document.get("_id")); System.out.println("内容:" + document.get("content")); System.out.println("用户ID:" + document.get("userid")); System.out.println("点赞数:" + document.get("thumbup")); } }2.3 新增@Test public void test3() { Map<String, Object> map = new HashMap(); map.put("_id", "6"); map.put("content", "很棒!"); map.put("userid", "9999"); map.put("thumbup", 123); Document document = new Document(map); comment.insertOne(document); }@Test public void test3() { Map<String, Object> map = new HashMap(); map.put("_id", "6"); map.put("content", "很棒!"); map.put("userid", "9999"); map.put("thumbup", 123); Document document = new Document(map); comment.insertOne(document); }2.4 修改@Test public void test4() { //修改的条件 Bson filter = new BasicDBObject("_id", "6"); //修改的数据 Bson update = new BasicDBObject("$set", new Document("userid", "8888")); comment.updateOne(filter, update); }2.5 删除@Test public void test5() { //删除的条件 Bson filter = new BasicDBObject("_id", "6"); comment.deleteOne(filter); }优势:1、在适量级的内存的MongoDB的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。2、MongoDB的高可用和集群架构拥有十分高的扩展性。3、在副本集中,当主库遇到问题,无法继续提供服务的时候,副本集将选举一个新的主库继续提供服务。4、MongoDB的Bson和JSon格式的数据十分适合文档格式的存储与查询。劣势:1、 不支持事务操作。MongoDB本身没有自带事务机制,若需要在MongoDB中实现事务机制,需通过一个额外的表,从逻辑上自行实现事务。2、 应用经验少,由于NoSQL兴起时间短,应用经验相比关系型数据库较少。3、MongoDB占用空间过大。
  • [技术干货] PHP封装的简单连接MongoDB类示例
    1. 封装MongoDB类<?php class MongoDB { private $database; private $mongo; function __construct() { $this->mongo = new MongoClient("mongodb://user:password@server_address:port/admin"); $this->database = $this->mongo->selectDB("data"); } { return $this->database->selectCollection($collection); } //获取所有的集合名 function getCollections() { return $this->database->getCollectionNames(); } //选数据库 function selectDB($db) { $this->database = $this->mongo->selectDB($db); } } 2. 简单调用,insert数据。class DemoController extends CI_Controller { function __construct() { parent::__construct(); //CI中加载类 $this->load->library('mongo_lib', '', 'mongodb'); } //插入一条数据 function create() { $data = array('name'=>'mike','email'=>'abc@163.com); //选择库,shell:user demo_db $this->mongodb->selectDB('demo_db'); //选择集合,db.demo_col.insert(); $rebateCollection = $this->mongodb->getCollection('demo_collection'); $res = $rebateCollection->insert($data); } }
  • [技术干货] MongoDB 复制
    replication set复制集,复制集,多台服务器维护相同的数据副本,提高服务器的可用性。MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。设置过程:(1)创建示例假设创建三台,创建三个实例目录和日志目录:mkdir /home/m17 /home/m18 /home/m19 /home/mlog启动三个示例,端口分别为27017、27018、27019。./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles ./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles ./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles 说明:参数--replSet设置一样,才能属于同一个复制集参数--smallfiles可以节省空间,提高速度。然后使用ps aux | grep mongo可以查看到启动起来的三个端口。(2)配置使用客户端连接mongo进行配置:[test@localhost bin]$ ./mongo要管理配置,所以切换到admin上:>use admin(配置是json格式)var rsconf = { _id:'rs2', members:[ {"_id":0,host:'192.168.8.172:27017'}, {_id:1,host:'192.168.8.172:27018'}, {_id:2,host:'192.168.8.172:27019'} ] }如果没有配置ip,使用127.0.0.1var rsconf = { _id:'rs2', members:[ {_id:0,host:'127.0.0.1:27017'}, {_id:1,host:'127.0.0.1:27018'}, {_id:2,host:'127.0.0.1:27019'} ] } 执行后,使用 printjson(rsconf)查看刚才的配置。然后执行初始化:>rs.initiate(rsconf); > rs.initiate(rsconf); { "ok" : 1, "operationTime" : Timestamp(1539933041, 1), "$clusterTime" : { "clusterTime" : Timestamp(1539933041, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } rs2:SECONDARY>  查看节点:rs.status()删除节点:rs.remove('127.0.0.1:27019')添加节点:rs.add('127.0.0.1:27019')切换节点:默认是在27017端口,即rs2:PRIMARY>状态,退出mongo客户端命令模式,切换到另一个端口:[test@localhost bin]$ ./mongo --port=27018,
  • [技术干货] MongoDB 复制
    replication set复制集,复制集,多台服务器维护相同的数据副本,提高服务器的可用性。MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。设置过程:(1)创建示例假设创建三台,创建三个实例目录和日志目录:mkdir /home/m17 /home/m18 /home/m19 /home/mlog启动三个示例,端口分别为27017、27018、27019。./mongod --dbpath=/home/m17 --logpath=/home/mlog/m17.log --fork --port=27017 --replSet=rs2 --smallfiles ./mongod --dbpath=/home/m18 --logpath=/home/mlog/m18.log --fork --port=27018 --replSet=rs2 --smallfiles ./mongod --dbpath=/home/m19 --logpath=/home/mlog/m19.log --fork --port=27019 --replSet=rs2 --smallfiles 说明:参数--replSet设置一样,才能属于同一个复制集参数--smallfiles可以节省空间,提高速度。然后使用ps aux | grep mongo可以查看到启动起来的三个端口。(2)配置使用客户端连接mongo进行配置:[test@localhost bin]$ ./mongo 要管理配置,所以切换到admin上:>use admin(配置是json格式)var rsconf = { _id:'rs2', members:[ {"_id":0,host:'192.168.8.172:27017'}, {_id:1,host:'192.168.8.172:27018'}, {_id:2,host:'192.168.8.172:27019'} ] } 如果没有配置ip,使用127.0.0.1var rsconf = { _id:'rs2', members:[ {_id:0,host:'127.0.0.1:27017'}, {_id:1,host:'127.0.0.1:27018'}, {_id:2,host:'127.0.0.1:27019'} ] } 执行后,使用 printjson(rsconf)查看刚才的配置。然后执行初始化:>rs.initiate(rsconf); > rs.initiate(rsconf); { "ok" : 1, "operationTime" : Timestamp(1539933041, 1), "$clusterTime" : { "clusterTime" : Timestamp(1539933041, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } rs2:SECONDARY> 查看节点:rs.status()删除节点:rs.remove('127.0.0.1:27019')添加节点:rs.add('127.0.0.1:27019')切换节点:默认是在27017端口,即rs2:PRIMARY>状态,退出mongo客户端命令模式,切换到另一个端口:[test@localhost bin]$ ./mongo --port=27018,
  • [技术干货] ubuntu安装mongodb创建账号和库及添加坐标索引的流程分析
    摘要: 作为开发,nosql我们用的越来越多,代表性的是mongodb,速度快性能好,还能完美的创建二维索引.这里我们梳理一下ubuntu上安装mongodb创建账号和库及添加坐标索引一  安装  1.1 安装php-mongodbsudo apt-get install php-mongodb 1.2 安装mongodb-orgsudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 如果是ubuntu16或者18则echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list接下来sudo apt-get update sudo apt-get install -y mongodb-org sudo service mongod start # 启动二  常见启动等命令sudo service mongod start # 启动 sudo service mongod stop # 关闭 ps aux | grep mongod  # 查看进程三  创建表,角色与权限   3.1 管理员账号mongo --host 127.0.0.1 use admin db.createUser( ... { ... user: "test", ... pwd: "test@1111", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] ... } ... ) db.getUser('test') exit3.2 对象库管理员账号及权限mongo --host 127.0.0.1 -u 'test' --authenticationDatabase 'admin' -p 'test@1111' use admin db.auth('test','test@1111') use lbs db.createUser( ... { ... user: "testlbs", ... pwd: "testlbs1111", ... roles: [ { role: "readWrite", db: "lbs" }, ... { role: "read", db: "lbs" } ] ... } ... ) exit3.3 对象库索引mongo --host 127.0.0.1 -u 'testlbs' --authenticationDatabase 'lbs' -p 'testlbs1111' db use lbs db db.createCollection('lbs',{capped:false}) db.lbs.createIndex({'location':'2dsphere'}) db.lbs.createIndex({'uniqid':1},{unique:true})四  卸载  4.1 关闭守护进程mongodsudo service mongod stop4.2 卸载安装的软件包sudo apt-get purge mongodb-org* 4.3 移除数据库和日志文件(数据库和日志文件的路径取决于/etc/mongod.conf文件中的配置)sudo rm -r /var/log/mongodb sudo rm -r /var/lib/mongodb
  • [技术干货] 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目前不知道是哪里的问题,求帮助
总条数:176 到第
上滑加载中