全新以最小化包安装了64位的CentOS6.3系统,作为本地的Web服务器使用,现记录全过程
第八步,安装配置mongodb-2.2及rockmongo,本文讲解了mongodb安装、主从配置、php驱动编译、mongodb添加为系统服务及开机启动。
下载mongodb最新版本mongodb-linux-x86_64-2.2.0.tgz
mongodb的PHP驱动下载地址
rockmong下载地址,下载个300多KB的zip就行了,别下载集成环境
我的mongodb目录配置如下,数据库为主从设置,并配置成开机自启动:
执行文件路径:/usr/local/mongodb/bin
日志文件路径:/usr/local/mongodb/conf
配置文件路径:/usr/local/mongodb/logs
数据库路径:/data/mongodb
源码包存放位置:/usr/software
mongodb是免安装的,解压后直接移到/usr/local并重命名为mongodb即可
[root@localhost ~]# tar zxvf mongodb-linux-x86_64-2.2.0.tgz
[root@localhost ~]# mv mongodb-linux-x86_64-2.2.0 /usr/local/mongodb
[root@localhost ~]# cd /usr/local/mongodb
[root@localhost ~]# mkdir conf
[root@localhost ~]# mkdir logs
分别创建主从日志文件master.log、slave.log,及配置文件master.conf、slave.conf
[root@localhost ~]# touch /usr/local/mongodb/logs/master.log
[root@localhost ~]# touch /usr/local/mongodb/logs/slave.log
[root@localhost ~]# vim /usr/local/mongodb/conf/master.conf
master.conf文件内容如下
# master mongodb
master=true
# slave ip
source=localhost
oplogSize=1024
# directory for datafiles
dbpath=/data/mongodb/master
# log file to send write to instead of stdout - has to be a file, not directory
logpath=/usr/local/mongodb/logs/master.log
# append to logpath instead of over-writing
logappend=true
# each database will be stored in a separate directory
directoryperdb=true
port = 27017
# fork server process
fork=true
# run with security
#auth=true
journal=true
maxConns=1000
master=true
# slave ip
source=localhost
oplogSize=1024
# directory for datafiles
dbpath=/data/mongodb/master
# log file to send write to instead of stdout - has to be a file, not directory
logpath=/usr/local/mongodb/logs/master.log
# append to logpath instead of over-writing
logappend=true
# each database will be stored in a separate directory
directoryperdb=true
port = 27017
# fork server process
fork=true
# run with security
#auth=true
journal=true
maxConns=1000
[root@localhost ~]# vim /usr/local/mongodb/conf/slave.conf
slave.conf配置文件如下
# slave mongodb
slave=true
# master ip
source=localhost
# directory for datafiles
dbpath=/data/mongodb/slave
# log file to send write to instead of stdout - has to be a file, not directory
logpath=/usr/local/mongodb/logs/slave.log
# append to logpath instead of over-writing
logappend=true
# each database will be stored in a separate directory
directoryperdb=true
port = 27018
# fork server process
fork=true
# run with security
#auth=true
nohttpinterface=true
# max connections
maxConns=1000
autoresync=true
slave=true
# master ip
source=localhost
# directory for datafiles
dbpath=/data/mongodb/slave
# log file to send write to instead of stdout - has to be a file, not directory
logpath=/usr/local/mongodb/logs/slave.log
# append to logpath instead of over-writing
logappend=true
# each database will be stored in a separate directory
directoryperdb=true
port = 27018
# fork server process
fork=true
# run with security
#auth=true
nohttpinterface=true
# max connections
maxConns=1000
autoresync=true
配置mongodb开机自启动,在/etc/init.d/下创建mongodb启动文件
[root@localhost ~]# vim /etc/init.d/mongodb
mongodb文件内容如下
#! /bin/sh
#
# mongodb this script starts and stops the mongodb daemon
#
# chkconfig: 345 85 15
# description: MongoDB is a non-relational database storage system.
# processname: mongodb
# config: /usr/local/mongodb/conf/
# pidfile: /usr/slocal/mongodb/mongodb.pid
PATH=/usr/local/mongodb/bin:/sbin:/bin:/usr/sbin:/usr/bin
# var mongodb pid
pid=`ps -o pid,command ax | grep mongodb | awk '!/awk/ && !/\/bin\/sh/ && !/grep/ && !/tail/ {print $1}'`;
NAME=mongodb
test -x $DAEMON || exit 0
set -e
#
# See how we were called.
case "$1" in
start)
# Start daemons.
if [ "${pid}" != "" ]; then
"/etc/init.d/mongodb" 50L, 1449C
#! /bin/sh
#
# mongodb this script starts and stops the mongodb daemon
#
# chkconfig: 345 85 15
# description: MongoDB is a non-relational database storage system.
# processname: mongodb
# config: /usr/local/mongodb/conf/
# pidfile: /usr/slocal/mongodb/mongodb.pid
PATH=/usr/local/mongodb/bin:/sbin:/bin:/usr/sbin:/usr/bin
# var mongodb pid
pid=`ps -o pid,command ax | grep mongodb | awk '!/awk/ && !/\/bin\/sh/ && !/grep/ && !/tail/ {print $1}'`;
NAME=mongodb
test -x $DAEMON || exit 0
set -e
#
# See how we were called.
case "$1" in
start)
# Start daemons.
if [ "${pid}" != "" ]; then
echo -n "MongoDB already start. "
else
echo -n "Starting mongoDB: "
rm -rf /data/mongodb/master/mongod.lock
rm -rf /data/mongodb/slave/mongod.lock
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/master.conf
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/slave.conf
fi
echo "${pid}"
;;
stop)
# Stop daemons.
echo -n "Stopping MongoDB... "
if [ "${pid}" != "" ]; then
kill -2 ${pid};
fi
;;
restart)
$0 stop
$0 start
#
# mongodb this script starts and stops the mongodb daemon
#
# chkconfig: 345 85 15
# description: MongoDB is a non-relational database storage system.
# processname: mongodb
# config: /usr/local/mongodb/conf/
# pidfile: /usr/slocal/mongodb/mongodb.pid
PATH=/usr/local/mongodb/bin:/sbin:/bin:/usr/sbin:/usr/bin
# var mongodb pid
pid=`ps -o pid,command ax | grep mongodb | awk '!/awk/ && !/\/bin\/sh/ && !/grep/ && !/tail/ {print $1}'`;
NAME=mongodb
test -x $DAEMON || exit 0
set -e
#
# See how we were called.
case "$1" in
start)
# Start daemons.
if [ "${pid}" != "" ]; then
"/etc/init.d/mongodb" 50L, 1449C
#! /bin/sh
#
# mongodb this script starts and stops the mongodb daemon
#
# chkconfig: 345 85 15
# description: MongoDB is a non-relational database storage system.
# processname: mongodb
# config: /usr/local/mongodb/conf/
# pidfile: /usr/slocal/mongodb/mongodb.pid
PATH=/usr/local/mongodb/bin:/sbin:/bin:/usr/sbin:/usr/bin
# var mongodb pid
pid=`ps -o pid,command ax | grep mongodb | awk '!/awk/ && !/\/bin\/sh/ && !/grep/ && !/tail/ {print $1}'`;
NAME=mongodb
test -x $DAEMON || exit 0
set -e
#
# See how we were called.
case "$1" in
start)
# Start daemons.
if [ "${pid}" != "" ]; then
echo -n "MongoDB already start. "
else
echo -n "Starting mongoDB: "
rm -rf /data/mongodb/master/mongod.lock
rm -rf /data/mongodb/slave/mongod.lock
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/master.conf
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/slave.conf
fi
echo "${pid}"
;;
stop)
# Stop daemons.
echo -n "Stopping MongoDB... "
if [ "${pid}" != "" ]; then
kill -2 ${pid};
fi
;;
restart)
$0 stop
$0 start
;;
esac
exit 0
esac
exit 0
修改/etc/init.d/mongodb权限并加入到开机自启动
[root@localhost ~]# chmod +x /etc/init.d/mongodb
[root@localhost ~]# chkconfig mongodb on
mongodb数据库启动、停止、重启命令分别如下
[root@localhost ~]# service mongodb start
[root@localhost ~]# service mongodb stop
[root@localhost ~]# service mongodb restart
mongodb的php驱动安装,使用phpize编译mongodb驱动扩展
将mongodb驱动解压,使用unzip命令
unzip mongodb-mongo-php-driver-(xxx: version).zip
unzip mongodb-mongo-php-driver-(xxx: version).zip
[root@localhost ~]# unzip mongodb-mongo-php-driver-1.3.0beta2-134-g606c757.zip
[root@localhost ~]# cd mongodb-mongo-php-driver-606c757
[root@localhost ~]# /usr/local/php/bin/phpize
[root@localhost ~]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-mongo
[root@localhost ~]# make && make install
[root@localhost ~]# make && make install
[root@localhost ~]# mkdir /usr/local/php/ext //php下新建ext目录,用来存放php扩展
[root@localhost ~]# cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/mongo.so /usr/local/php/ext/
修改php.ini,开启mongo.so,在php.ini中加入一行
修改php.ini,开启mongo.so,在php.ini中加入一行
[root@localhost ~]# vim /usr/local/apache/conf/php.ini
extension=/usr/local/php/ext/mongo.so
extension=/usr/local/php/ext/mongo.so
[root@localhost ~]# service httpd restart
rockmongo配置(类似phpMyAdmin的mongodb管理工具)
将rockmongo解压缩后,移至/usr/local/apache/htdocs/下面
修改数据库连接配置,这个文件跟phpMyAdmin非常类似
[root@localhost ~]# vim /usr/local/apache/htdocs/rockmongo/config.php
$MONGO["servers"][$i]["mongo_name"] = "Localhost"; //服务器名称,可以自定义
$MONGO["servers"][$i]["mongo_host"] = "127.0.0.1"; //服务器IP地址
$MONGO["servers"][$i]["mongo_port"] = "27017"; //mongodb端口
$MONGO["servers"][$i]["mongo_auth"] = false; //mongodb是否需要用户名密码验证
$MONGO["servers"][$i]["mongo_user"] = "MONGO_USERNAME"; //mongodb数据库用户名
$MONGO["servers"][$i]["mongo_pass"] = "MONGO_PASSWORD"; //mongodb数据库密码
$MONGO["servers"][$i]["control_auth"] = true; //控制面板是否需要验证(必须开启true)
$MONGO["servers"][$i]["control_users"]["admin"] = "admin"; //控制面板登录的用户名及密码(前一个为用户名,后一个为密码)
rockmongo登录地址,用户名密码即为控制台的用户名及密码
mongodb管理工作,我一般使用rockmongo以及mongoVUE,相对是比较方便的工作,mongodb有bug不支持slave数据库连接管理
mongodb管理工作,我一般使用rockmongo以及mongoVUE,相对是比较方便的工作,mongodb有bug不支持slave数据库连接管理
补充一下,实测mongodb最新的php驱动有Bug,请大家不要下载mongodb-mongo-php-driver-1.3.0beta2版本。
这个版本是可用的,mongodb-mongo-php-driver-1.2.6-46-g52439c7.zip,如果找不到留言给我。
另外,rockmongo不能正常显示utf-8的中文(Bug),高人已向rockmongo提交了patch补丁包,具体如下:
解决方法:http://code.google.com/p/rock-php/issues/detail?id=205
原理:http://zhangshenjia.com/exprience/%E8%A7%A3%E5%86%B3rockmongo%E4%B8%8D%E6%98%BE%E7%A4%BA%E4%B8%AD%E6%96%87%E7%9A%84%E9%97%AE%E9%A2%98/
原理:http://zhangshenjia.com/exprience/%E8%A7%A3%E5%86%B3rockmongo%E4%B8%8D%E6%98%BE%E7%A4%BA%E4%B8%AD%E6%96%87%E7%9A%84%E9%97%AE%E9%A2%98/
[root@centos software]# vim /usr/local/apache/htdocs/rockmongo/app/funcs/functions.php
add below lines to /rockmongo/app/funs/functions.php, line 73:
--------------------------------------------------------------------
$ord = ord( $char );
if ( $ord >= 224 ) {
$char .= $json[ $c + 1 ] . $json[ $c + 2 ];
$c += 2;
} else if ( $ord >= 192 ) {
$char .= $json[ $c + 1 ];
$c += 1;
}
add below lines to /rockmongo/app/funs/functions.php, line 73:
--------------------------------------------------------------------
$ord = ord( $char );
if ( $ord >= 224 ) {
$char .= $json[ $c + 1 ] . $json[ $c + 2 ];
$c += 2;
} else if ( $ord >= 192 ) {
$char .= $json[ $c + 1 ];
$c += 1;
}