热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DebianLinux系统安装配置MongoDB数据库过程

mongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似
mongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

    面向集合存储,易存储对象类型的数据。
    模式自由。
    支持动态查询。
    支持完全索引,包含内部对象。
    支持查询。
    支持复制和故障恢复。
    使用高效的二进制数据存储,包括大型对象(如视频等)。
    自动处理碎片,以支持云计算层次的扩展性
    支持Ruby,Python,JAVA,C++,PHP等多种语言。
    文件存储格式为BSON(一种JSON的扩展)
    可通过网络访问

本文主要讲述在 Ubuntu Linux 安装配置 MongoDB 步骤:

一、在Ubuntu下最傻瓜的步骤(以下都在root用户下进行操作):

1. 运行"apt-get install mongo",如果遇到找不到安装包的话运行"apt-get update"。

# apt-get install mongo

2. 这时装好以后应该会自动运行mongod程序,通过"pgrep mongo -l "查看进程是否已经启动。

# pgrep mongo -l

3 .在终端输入"mongo",然后回车进入数据库。

# mongo

下面说下如何自己启动mongodb的程序。

二、重启系统以后mongo程序要自己重新手动启动,步骤如下:

1. 运行“locate mongo”命令查看系统默认把mongo装到了哪里,这里主要关注三个东西。

# locate mongo

    一个是名为“mongod”的程序的位置(他相当于mongo数据库的Server,需要一直在后台运行,我的路径:/usr/bin/mongod);
    一个是mongo 数据库log日志文件的位置(log日志文件要查看到具体的文件名,具体用法在后面有介绍,我的路径:/var/log/mongodb/mongodb.log);
一个是mongo的log日志的位置(我的路径:/var/log/mongodb/mongodb.log)。

2. 先进入mongod所在的目录(/usr/bin/mongod),然后运行“./mongod --dbpath /var/lib/mongodb/ --logpath /var/log/mongodb/mongodb.log --logappend &”

# cd /usr/bin/mongod
# ./mongod --dbpath /var/lib/mongodb/ --logpath /var/log/mongodb/mongodb.log --logappend &

    --dbpath:指定mongo的数据库文件在哪个文件夹。
--logpath:指定mongo的log日志是哪个,这里log一定要指定到具体的文件名。
    --logappend:表示log的写入是采用附加的方式,默认的是覆盖之前的文件。
    &:表示程序在后台运行。

注意:如果是系统非正常关闭,这样启动会报错,由于mongodb自动被锁上了,这是需要进入mongodb数据库文件所在的目录(/var/lib/mongodb/),删除目录中的mongodb.lock文件,然后再进行上述操作。

安装好以后就可以通过编写C++程序进行相应的数据库操作了,下面介绍一下编写简单的连接mongo的C++程序以及如果解决mongo动态库链接失败的情况:

一、安装好mongo数据库以后,创建一个用来链接数据库的简单C++程序mon2.cpp,发现很多网站都用这个程序做示例。

不过重点在于如何让这个程序真正可以跑起来显示出来结果,着实费了一番功夫。

#include  #include "client/dbclient.h"  using namespace mongo; using namespace std; void run() { DBClientConnection c; c.connect("localhost"); }  int main() { try { run(); cout << "connected ok" << endl; } catch( DBException &e ) { cout << "caught " << e.what() << endl; } return 0; }
在终端输入“g++ mon2.cpp -I /usr/include/mongo/ /usr/lib/libmongoclient.a -lboost_thread -lboost_filesystem -lboost_program_options”进行编译C++程序。

# g++ mon2.cpp -I /usr/include/mongo/ /usr/lib/libmongoclient.a -lboost_thread -lboost_filesystem -lboost_program_options

”-lboost_thread -lboost_filesystem -lboost_program_options“这三个是编译关于mongo的C++程序需要用到的动态库,问题往往出现在这里,涉及到数据库的程序编译不通过,八成是找不到对应的动态库文件。

二、解决编译C++程序时链接mongo的动态库失败的问题

最简单的解决办法:

在root用户下,首先进入mongo的库目录(我的路径是"/usr/lib"),然后在终端输入"ls -al | grep libboost"查找相应的动态链接库文件,如果找不到以".so"结尾文件,则拷贝("cp 源文件 目标文件")下面显示的七个动态库到当前目录,并且命名为"xxx.so" ,或者创建这七个动态库的软链接到当然目录(会在下面提到)。

# cd /usr/lib
# ls -al | grep libboost
# cp 源文件 目标文件

然后修改"/etc/ld.so.conf"文件,增加一行刚才存放.so文件的目录的地址,如下图则增加一行"/usr/lib"

include /etc/ld.so.conf/*.conf /usr/lib
保存完以后,运行"ldconfig"命令使配置生效。

# ldconfig

以上已经达到了可以运行编译的条件。下面再说下我在解决问题遇到的几种特殊的情况。

第一种情况:只要生成xxx.so文件与原来自带的动态库文件在同一个目录下面(不在同一个目录下面的软链接不起作用,具体见第三种情况),那么除了上面说到的拷贝方法生成.so文件,也可以通过创建软链接(ln -s 源文件 目标文件), 也可以达到目标,生成完以后通过"ls -al | grep libboost"查看生成软链接。

第二种情况:如果仅仅是进行了复制或者创建软链接到当前目录,而没有修改"/etc/ld.so.conf"文件,则可能会碰到下面的错误。

第三种情况:如果不在同一个目录的话,比如动态库文件在"/usr/lib"下面,想要生成的"xxx.so"文件存放在"/usr/local/lib"下面的情况。

注意一:不能用软链接的方法,只能通过拷贝的办法来实现。创建的软链接与本来的动态库文件要是不在一个目录,编译依然会报错,即使编译的时候通过“-L”指定动态库所在的文件夹也不会起作用。这里软链接虽然没用,但是当要创建的软链接与源文件不在同一目录时,创建软链接一定要用绝对路径,使用相对路径名会造成不必要的错误。

注意二:通过拷贝的办法来实现第三种情况,用拷贝“cp"命令将动态库文件以".so"结尾拷贝到"/usr/local/lib"下面。

然后修改相应的"/etc/ld.so.conf"文件,在终端输入"ldconfig"使配置生效。然后编译,编译通过以后,会发现系统会自动在“/usr/local/lib"下面创建关于".so"文件的软链接(原因不详)。编译通过,会在”/usr/local/lib“文件夹中自动生成了软链接,链接到".so"文件。

下面就来运行下生成的a.out吧。

# ./a.out


推荐阅读
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 探讨Redis的最佳应用场景
    本文将深入探讨Redis在不同场景下的最佳应用,包括其优势和适用范围。 ... [详细]
  • MongoVUE基础操作指南:轻松上手数据库管理
    本文介绍了MongoVUE的基础操作,旨在帮助用户轻松掌握数据库管理技巧。MongoVUE是一款功能强大的MongoDB客户端工具,虽然需要注册,但其用户友好的界面和丰富的功能使其成为许多开发者的首选。文中详细解释了安装步骤、基本配置以及常见操作方法,并对一些常见的问题进行了修正和补充,确保用户能够快速上手并高效使用MongoVUE进行数据库管理。 ... [详细]
  • 解决ADODB连接Access时出现80004005错误的方法
    本文详细介绍了如何解决在使用ADODB连接Access数据库时遇到的80004005错误,包括错误原因分析和具体的解决步骤。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 第一步java代码条件匹配与之对应的mongo数据查询第二步:java代码分组查询与之所对应的mongodb中sheel与所得出的表点击某个_id字段进入,所得出的图表为第三步:在 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
author-avatar
一月的泰迪熊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有