编译安装mongodb
http://www.mongodb.org/
http://blog.csdn.net/tys1986blueboy/article/details/7013163
mongodb目前最新的版本是.8.2-rc3,其源码安装用了很多第三方的东西,比如JS引擎(目前官方推荐的是mozilla的Spider Monkey,以后可能改成google的V8,和node.js一样,呵呵)、正则表达式引擎(pcre)、安装构建工具scons(这东西还要用python来安装)、boost C++库等等。下面是安装实录:
1,下载需要的源文件和相关软件包:
- [root@localhost mongodb]# wget http://downloads.mongodb.org/src/mongodb-src-r1.8.2-rc3.tar.gz
- [root@localhost mongodb]# wget http://sourceforge.net/projects/scons/files/scons/2.1.0.alpha.20101125/scons-2.1.0.alpha.20101125.tar.gz/download
- [root@localhost mongodb]# wget http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz
- [root@localhost mongodb]# wget http://sourceforge.net/projects/pcre/files/pcre/7.4/pcre-7.4.tar.gz/download
2,安装scons:
- [root@localhost mongodb]# tar zxvf scons-2.1.0.alpha.20101125.tar.gz
- [root@localhost mongodb]# cd scons-2.1.0.alpha.20101125
- [root@localhost scons-2.1.0.alpha.20101125]# python setup.py install
3,安装pcre:
- [root@localhost mongodb]# tar zxvf pcre-7.4.tar.gz
- [root@localhost mongodb]# cd pcre-7.4
- [root@localhost pcre-7.4]# ./configure
- [root@localhost pcre-7.4]# make
- [root@localhost pcre-7.4]# make install
4,安装Spider Monkey:
- [root@localhost mongodb]# tar zxvf js-1.7.0.tar.gz
- [root@localhost mongodb]# cd js/src
- [root@localhost src]# export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"
- [root@localhost src]# make -f Makefile.ref
- [root@localhost src]# JS_DIST=/usr make -f Makefile.ref export
5,安装boost,yum方式比较偷懒:
- [root@localhost src]# yum -y install boost boost-devel
6,安装mongodb:
- [root@localhost mongodb]# tar zxvf mongodb-src-r1.8.2-rc3.tar.gz
- [root@localhost mongodb]# cd mongodb-src-r1.8.2-rc3
- [root@localhost mongodb-src-r1.8.2-rc3]# scons all
- [root@localhost mongodb-src-r1.8.2-rc3]# scons --prefix=/usr/local/mongodb --full install
7,启动mongodb来测试:
- [root@localhost bin]# ./mongod --dbpath /tmp
- ./mongod: error while loading shared libraries: libpcrecpp.so.0: cannot open shared object file: No such file or directory
- [root@localhost bin]# LD_DEBUG=libs ./mongod -v
- ......
- 29656: trying file=/lib64/tls/x86_64/libpcrecpp.so.0
- 29656: trying file=/lib64/tls/libpcrecpp.so.0
- 29656: trying file=/lib64/x86_64/libpcrecpp.so.0
- 29656: trying file=/lib64/libpcrecpp.so.0
- 29656: trying file=/usr/lib64/tls/x86_64/libpcrecpp.so.0
- 29656: trying file=/usr/lib64/tls/libpcrecpp.so.0
- 29656: trying file=/usr/lib64/x86_64/libpcrecpp.so.0
- 29656: trying file=/usr/lib64/libpcrecpp.so.0
- 29656:
- ./mongod: error while loading shared libraries: libpcrecpp.so.0: cannot open shared object file: No such file or directory
- [root@localhost bin]# ln -s /usr/local/lib/libpcrecpp.so.0 /usr/lib64/libpcrecpp.so.0
- [root@localhost bin]# ll /usr/lib64/libpcrecpp.so.0
- lrwxrwxrwx 1 root root 30 Jun 8 11:57 /usr/lib64/libpcrecpp.so.0 -> /usr/local/lib/libpcrecpp.so.0
- [root@localhost bin]# ./mongod --dbpath /tmp
- Wed Jun 8 11:57:38 [initandlisten] MongoDB starting : pid=29700 port=27017 dbpath=/tmp 64-bit
- Wed Jun 8 11:57:38 [initandlisten] db version v1.8.2-rc3, pdfile version 4.5
- Wed Jun 8 11:57:38 [initandlisten] git version: nogitversion
- Wed Jun 8 11:57:38 [initandlisten] build sys info: Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009 x86_64 BOOST_LIB_VERSION=1_33_1
- Wed Jun 8 11:57:38 [initandlisten] waiting for connections on port 27017
- Wed Jun 8 11:57:38 [websvr] web admin interface listening on port 28017
- 1. apt-get install scons
- 2. apt-get install libpcrecpp0 ( Perl 5 Compatible Regular Expression Library - C++ runtime files )
- 3. apt-get install libpcre3-dev - Perl 5 Compatible Regular Expression Library - development files
- 4. apt-get install libboost1.35-dev (boost 库, 官网最新为1.4)
- 5. apt-get install libpcap-dev
- 6. apt-get install libmozjs-dev
- 7. apt-get install xulrunner-dev (gecko库)
- 8. wget http://fastdl.mongodb.org/src/mongodb-src-r1.4.4.tar.gz
- 9. tar zxvf mongodb-src-r1.4.4.tar.gz
- 10.cd 源代码解压目录
- 11. scons --sharedclient=SHAREDCLIENT all --prefix=/home/liubao/mongodb/mongodb
- 12. scons --prefix=/usr/local/enginc/mongodb install
mongoDB是用C++写的,在编译的过程中用到gecko的库。内部应该用了很多js的操作。而且看到了类似json.cpp文件。不知道数据是不是以json格式压缩存储的。明天看看这个东东怎么用。
还注意到一个问题。mongoDB是自己写的driver;而canssandra一类的则是用Thrift的协议进行跨语言通信;不知道这是出于性能的考虑还是其它的原因
- apt-get install scons
- E: Sub-process /usr/bin/dpkg returned an error code (1)问题解决办法:
- 此时可以这样解决:
- cd /var/lib/dpkg
- sudo mv info info.bak
- sudo mkdir info
http://code.freedomho.com/48526.html
mongodb 编译安装使用(Linux) 下载:http://www.mongodb.org/downloads:http://www.mongodb.org/downloads
使用c++ drive api
MongoDB 是一个高性能分布式文件存储数据库,通常采用官方的二进制包进行安装,整理记录下手工编译的方法。
准备工作:
CentOS 6.x 64位系统,建议采用多核CPU,在多核并行编译时,物理内存不能少于8G,否则会频繁使用交换分区,导致编译时间过长。在 Xeon E3 1230 V2/8G 配置下编译大概耗时30分钟。
1.安装依赖的软件包
# yum install pcre-devel python-devel scons
2.从官方下载最新的源码包
http://www.mongodb.org/downloads
3.使用Py 编译工具scons 进行编译并安装
# tar zxf mongdb-src.tar.gz
//解压
# cd mongodb-src
# scons -j 8 all //使用8线程并行编译,推荐使用CPU核心数
# scons –prefix=/usr/local/mongo install
// 如果需要lib库和include头文件 需要加上 –full 参数如下:
# scons –prefix=/usr/local/mongo –full install
4.添加mongodb 用户和配置
# useradd mongodb -M -s /sbin/nologin
//创建目录,根据需要进行自定义
# mkdir -pv /etc/mongo //配置文件路径
# mkdir -pv /var/lib/mongo //数据存储路径
# mkdir -pv /var/log/mongo //日志文件路径
# mkdir -pv /var/run/mongodb //Pid 路径
//将源码包中的配置文件复制到 /etc/mongo 下
# cp mongodb-src/rpm/mongod.conf /etc/mongo
//给予日志和数据路径mongodb用户组访问权限
# chown -R mongodb.mongodb /var/log/mongodb
# chown -R mongodb.mongodb /var/lib/mongodb
5. 编辑配置文件
# vi /etc/mongo/mongod.conf
—–配置参考下面的路径进行或查阅配置说明文档——
dbpath = /var/lib/mongo
logpath = /var/log/mongo
pidfilepath = /var/run/mongodb/mongod.pid
directoryperdb = true
logappend = true
noauth = true
port = 27017
maxConns = 1024
fork = true
rest = true
quota = true
quotaFiles = 1024
nssize = 16
—–配置参考结束——
6.配置开机启动文件
//将下列脚本保存为 mongod 并存放在/etc/rc.d/init.d/ 下,并给与执行权限
1 |
#!/bin/sh |
2 |
# |
3 |
# mongodb init file for starting up the MongoDB server |
4 |
# |
5 |
# chkconfig: - 20 80 |
6 |
# description: Starts and stops the MongDB daemon that handles all \ |
7 |
# database requests. |
8 |
9 |
# Source function library. |
10 |
. /etc/rc.d/init.d/functions |
11 |
12 |
exec="/usr/local/mongo/bin/mongod" |
13 |
prog="mongod" |
14 |
logfile="/var/log/mongodb/mongodb.log" |
15 |
options=" -f /etc/mongo/mongod.conf" |
16 |
17 |
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog |
18 |
19 |
lockfile="/var/lock/subsys/mongod" |
20 |
21 |
start() { |
22 |
[ -x $exec ] || exit 5 |
23 |
echo -n $"Starting $prog: " |
24 |
daemon --user mongodb "$exec --quiet $options run >> $logfile 2>&1 &" |
25 |
retval=$? |
26 |
echo |
27 |
[ $retval -eq 0 ] && touch $lockfile |
28 |
return $retval |
29 |
} |
30 |
31 |
stop() { |
32 |
echo -n $"Stopping $prog: " |
33 |
killproc $prog |
34 |
retval=$? |
35 |
echo |
36 |
[ $retval -eq 0 ] && rm -f $lockfile |
37 |
return $retval |
38 |
} |
39 |
40 |
restart() { |
41 |
stop |
42 |
start |
43 |
} |
44 |
45 |
reload() { |
46 |
restart |
47 |
} |
48 |
49 |
force_reload() { |
50 |
restart |
51 |
} |
52 |
53 |
rh_status() { |
54 |
# run checks to determine if the service is running or use generic status |
55 |
status $prog |
56 |
} |
57 |
58 |
rh_status_q() { |
59 |
rh_status >/dev/null 2>&1 |
60 |
} |
61 |
62 |
63 |
case "$1" in |
64 |
start) |
65 |
rh_status_q && exit 0 |
66 |
$1 |
67 |
;; |
68 |
stop) |
69 |
rh_status_q || exit 0 |
70 |
$1 |
71 |
;; |
72 |
restart) |
73 |
$1 |
74 |
;; |
75 |
reload) |
76 |
rh_status_q || exit 7 |
77 |
$1 |
78 |
;; |
79 |
force-reload) |
80 |
force_reload |
81 |
;; |
82 |
status) |
83 |
rh_status |
84 |
;; |
85 |
condrestart|try-restart) |
86 |
rh_status_q || exit 0 |
87 |
restart |
88 |
;; |
89 |
*) |
90 |
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" |
91 |
exit 2 |
92 |
esac |
93 |
exit $? |
# chkconfig –add mongod
//设置为开机启动
# service mongod start
// 进行启动并测试27017端口是否开放,如果配置有误,请查阅 /var/log/mongo 下的日志输出信息
7. PHP的MongoDB 扩展安装
从 http://pecl.php.net/ 搜索mongo 并获取最新稳定版的扩展包
# tar zxf mongo-1.3.0.tgz
# cd mongo-1.3.0
# /usr/local/php/bin/phpize
# ./configure –with-php-config=/usr/local/php/bin/php-config // 注意php-config 安装路径
# make && make install
//解压并配置进行安装
编辑php.ini 配置文件在末行添加
extension=mongo.so
//如果之前从未安装其它扩展,需要先指定extension_dir 扩展目录
完成后重启PHP,查看phpinfo 有mongo 的项目出现则安装成功.
http://duoyun.org/topic/51556970ca60a10d420148e4
java 简单,略过。
python
$ git clone git://github.com/mongodb/mongo-python-driver.git pymongo
$ cd pymongo/
$ python setup.py install
c++
操作系统环境:centos 6.2 final
安装boost库,推荐1.49版本。
cd boost_1_49_0
./bootstrap.sh
…
./b2
…
./b2 install
下载2.2最新驱动
wget http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-v2.2-latest.tgz
tar zxf mongodb-linux-x86_64-v2.2-latest.tgz
cd mongo-cxx-driver-v2.2
yum -y install scons
scons
scons install
ldconfig /usr/local/lib
安装成功。
测试
cat tutorial.cpp
#include<cstdlib>#include<iostream>#include"mongo/client/dbclient.h"void run(){
mongo::DBClientConnection c;
c.connect("localhost");}int main(){try{
run();
std::cout <<"connected ok"<< std::endl;}catch(const mongo::DBException&e ){
std::cout <<"caught "<< e.what()<< std::endl;}return EXIT_SUCCESS;}
[root@ccj mongo-cxx-driver-v2.2]#g++ tutorial.cpp -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options
[root@ccj mongo-cxx-driver-v2.2]# ./a.out
connected ok
注意:
在centos 5.6编译报错,g++版本低了,可尝试换成gcc 4.4
$ scons --cxx=g++-4.4 --ldflags=/usr/lib
https://github.com/mongodb/mongo/pull/230
http://www.huilog.com/?p=117
在centos 5.4上把mongodb 1.4.0编译成rpm包安装
rpm包还是比较好管理和升级的,今天试着把mongodb 1.4.0做成rpm包。
网上的文章比较少,只有自己摸索着做了。
首先需要先做一些准备工作:
安装epel库,这一步可有可无。
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
rpm -ivh epel-release-5-3.noarch.rpm
安装一些相关的rpm,编译或运行mongo需要这些:
yum install -y bzip2-devel python-devel libicu-devel chrpath zlib-devel nspr-devel readline-devel ncurses-devel boost-devel pcre-devel js-devel readline-devel git tcsh scons gcc-c++ glibc-devel js js-devel
还需要将centos 5.4上的boost从1.33升级到1.38,mongodb建议1.34以上,更好的支持高并发情况。如果不升级,编译的时候会有相关的警告信息。
这一块想了很多办法,从官网http://www.boost.org/上下载源码包编译成rpm没有成功,而且版本差异过大,担心会有问题,所以偷了一下懒,直接用网上的src.rpm了。
下载:
wget ftp://195.220.108.108/linux/sourceforge/g/project/gr/gridiron2/support-files/FC10%20source%20RPMs/boost-1.38.0-1.fc10.src.rpm
或:
wget http://mirror.transact.net.au/sourceforge/g/project/gr/gridiron2/support-files/FC10%20source%20RPMs/boost-1.38.0-1.fc10.src.rpm
安装:
rpm -ivh boost-1.38.0-1.fc10.src.rpm
打包:
rpmbuild -ba /usr/src/redhat/SPECS/boost.spec
用刚刚编译的rpm包升级本机的boost:
rpm -Uvh /usr/src/redhat/RPMS/x86_64/boost-1.38.0-1.x86_64.rpm /usr/src/redhat/RPMS/x86_64/boost-devel-1.38.0-1.x86_64.rpm
查看一下:
[root@x64test ~]# rpm -qa | grep boost
boost-devel-1.38.0-1
boost-1.38.0-1
OK了,都是1.38版本的。
还要重新编译pcre,自带的编译时没带–enable-unicode-properties参数,用自带的编译出来的mongdb启动时会提示:
[root@x64test ~]# mongod
warning: some regex utf8 things will not work. pcre build doesn’t have –enable-unicode-properties
我们下载src.rpm包重新编译:
[root@x64test ~]# wget http://mirrors.sohu.com/centos/5.4/os/SRPMS/pcre-6.6-2.el5_1.7.src.rpm
[root@x64test ~]# rpm -ivh pcre-6.6-2.el5_1.7.src.rpm
[root@x64test ~]# vi /usr/src/redhat/SPECS/pcre.spec
%configure –enable-utf8
改成:
%configure –enable-utf8 –enable-unicode-properties
[root@x64test ~]# rpmbuild -ba /usr/src/redhat/SPECS/pcre.spec
[root@x64test ~]# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-6.6-2.7.x86_64.rpm
[root@x64test ~]# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-devel-6.6-2.7.x86_64.rpm
下面开始编译mongodb 1.4.0:
1) 先下载:
wget http://downloads.mongodb.org/src/mongodb-src-r1.4.0.tar.gz
2) 解压:
tar -xvzf mongodb-src-r1.4.0.tar.gz
3) 按mongo.spec定义的文件名和目录重新做一个压缩包出来:
mv mongodb-src-r1.4.0 mongo-1.4.0
tar -czf mongo-1.4.0.tar.gz mongo-1.4.0
4) copy到打包目录:
cp mongo-1.4.0/rpm/mongo.spec /usr/src/redhat/SPECS/
cp mongo-1.4.0.tar.gz /usr/src/redhat/SOURCES/
5) mongo.spec有个小bug,还得改下:
vi /usr/src/redhat/SPECS/mongo.spec
找到第71行,将:
/usr/sbin/useradd -M -r -U -d /var/lib/mongo -s /bin/false
-c mongod mongod > /dev/null 2>&1
换成:
/usr/sbin/useradd -M -r -d /var/lib/mongo -s /bin/false
-c mongod mongod > /dev/null 2>&1
或者:
/usr/sbin/useradd -M -r -d /var/lib/mongo -s /bin/false
-c mongod mongod > /dev/null 2>&1 || true
这是一个bug,useradd没有-U这个参数,小写的-u倒是有。不改这个编译完成后,mongo-server会安装不成功。
上面一个更改经过测试没有问题,但是需要确保安装的时候系统内没有mongod用户存在,如果这个用户存在的话还是会报错(rpm -Uvh肯定就不行了)。后面的更改是为解决这个问题的,不过没有测试过。
6) 开始编译打包:
rpmbuild -ba /usr/src/redhat/SPECS/mongo.spec
7) 安装:
cp /usr/src/redhat/RPMS/x86_64/mongo*.rpm .
rpm -ivh mongo*.rpm
安装完成。

浙公网安备 33010602011771号