Mongodb 是神马?我就不多说了,总之它是一个非关系型数据库。这两天把玩把玩了它,由于我电脑上的 php 环境是用 Lampp (就是 windows 上的 Xampp ) 搭建的,默认是 mysql,而我现在要用 mongodb 就要自己编译 extension。

首先,我的环境是 ubuntu 10.10, Lampp 1.7.4。

相信你也是和我一样,用着 linuxlampp 才找到这里的,哈哈,所以除了以上基本的环境之外你还要下载:

OK,把上面三个包下载完后就,这里默认下载的文件所在路径在用户主目录下,即 "~/" 下

# 把 lampp 开发套装解压到 lampp 的安装目录
sudo tar zxvf xampp-linux-devel-1.7.4.tar.gz -C /opt/lampp
# 把 mongodb 解压到 /usr/local
sudo tar zxvf mongodb-linux-i686-1.6.5.tgz -C /usr/local
# 解压 mongodb 的 php extension 到当前目录
sudo tar zxvf mongo-1.1.4.tgz
cd mongo-1.1.4
# 注意从这里开始我们已经在 ~/mongo-1.1.4 目录下了
export PATH=/opt/lampp/bin:$PATH
export LD_LIBRARY_PATH=/opt/lampp/lib:$LD_LIBRARY_PATH
# 看一下你运行 phpize 时有没有错误,一般会说没有 autoconf 这个软件
# 没有的话就装一个 sudo apt-get install autoconf
phpize
./configure --with-php-config=/opt/lampp/bin/php-config
make
make install

然后,看一下下面这个路径,应该已经有 mongo.so 这个文件了。

/opt/lampp/lib/php/extensions/no-debug-non-zts-20090626/mongo.so

然后,编辑 php.ini

/opt/lampp/ext/php.ini

在里面添加一行

extension = "mongo.so"

然后,在 /usr/local/mongodb-linux-i686-1.6.5 下建立两个配置文件

cd /usr/local/mongodb-linux-i686-1.6.5
sudo mkdir etc
# mongodb.conf 内容在下面
vim mongodb.conf
# mongod 内容在下面
vim mongod
# 给 mongod 添加可执行权限
sudo chmod +x mongod
# 在 /opt/lampp/ 下创建 mongod 链接
# 之后就可以用 sudo /opt/lampp/mongod start
# 来启动 mongodb 服务了
ln -s /usr/local/mongodb-linux-i686-1.6.5/etc/mongod /opt/lampp/mongod

下面是 /usr/local/mongodb-linux-i686-1.6.5/etc/mongodb.conf 文件

NAME=mongodb
BIND_IP=127.0.0.1
PORT=27017
AUTH=true
# mongodb 数据库文件保存的路径
DBPATH=/opt/lampp/var/mongodb
LOGDIR=/opt/lampp/logs
LOGFILE=$LOGDIR/$NAME.log
AUTH_ARG="--auth"
if [ $AUTH != true ]; then
	AUTH_ARG="--noauth"
fi
DAEMON_OPTS="--dbpath $DBPATH --logpath $LOGFILE --bind_ip $BIND_IP --port $PORT $AUTH_ARG"

下面是 /usr/local/mongodb-linux-i686-1.6.5/etc/mongod 文件

#!/bin/sh
#
# init.d script with LSB support.
#
# Copyright (c) 2007 Javier Fernandez-Sanguino 
#
# This is free software; you may redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2,
# or (at your option) any later version.
#
# This is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License with
# the Debian operating system, in /usr/share/common-licenses/GPL;  if
# not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA
#
### BEGIN INIT INFO
# Provides:          mongodb
# Required-Start:    $network $local_fs
# Required-Stop:
# Should-Start:      $named
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: An object/document-oriented database
# Description:       MongoDB is a high-performance, open source, schema-free
#                    document-oriented  data store that's easy to deploy, manage
#                    and use. It's network accessible, written in C++ and offers
#                    the following features:
#
#                       * Collection oriented storage - easy storage of object-
#                         style data
#                       * Full index support, including on inner objects
#                       * Query profiling
#                       * Replication and fail-over support
#                       * Efficient storage of binary data including large
#                         objects (e.g. videos)
#                       * Auto-sharding for cloud-level scalability (Q209)
#
#                    High performance, scalability, and reasonable depth of
#                    functionality are the goals for the project.
### END INIT INFO
PATH=/opt/lampp/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/mongodb-linux-i686-1.6.5/bin/mongod
DATA=/opt/lampp/var/mongodb
NAME=mongodb
DESC=database
STARTTIME=1
if test ! -x $DAEMON; then
    echo "Could not find $DAEMON"
    exit 0
fi
if test ! -x $DATA; then
    mkdir $DATA || exit 0
fi
. /lib/lsb/init-functions
LOGDIR=/opt/lampp/logs
PIDFILE=/opt/lampp/var/run/$NAME.pid
DIETIME=10                   # Time to wait for the server to die, in seconds
                            # If this value is set too low you might not
                            # let some servers to die gracefully and
                            # 'restart' will not work
LOGFILE=$LOGDIR/$NAME.log  # Server logfile
DAEMON_OPTS="--dbpath $DATA --logpath $LOGFILE run"
# Include mongodb defaults if available
if [ -f /usr/local/mongodb-linux-i686-1.6.5/etc/$NAME ] ; then
	. /usr/local/mongodb-linux-i686-1.6.5/etc/$NAME
fi
echo $DAEMON_OPTS
#DAEMONUSER=nobody
# Check that the user exists (if we set a user)
# Does the user exist?
if [ -n "$DAEMONUSER" ] ; then
    if getent passwd | grep -q "^$DAEMONUSER:"; then
        # Obtain the uid and gid
        DAEMONUID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}'`
        DAEMONGID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}'`
    else
        log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist."
        exit 1
    fi
fi
set -e
running_pid() {
# Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] &&  return 1
    cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
    # Is this the expected server
    [ "$cmd" != "$name" ] &&  return 1
    return 0
}
running() {
# Check if the process is running looking at /proc
# (works for all users)
    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    pid=`cat $PIDFILE`
    running_pid $pid $DAEMON || return 1
    return 0
}
start_server() {
# Start the process using the wrapper
        if [ -z "$DAEMONUSER" ] ; then
            start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                        --make-pidfile --exec $DAEMON -- $DAEMON_OPTS
            errcode=$?
        else
# if we are using a daemonuser then change the user id
            start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
                        --make-pidfile --chuid $DAEMONUSER \
                        --exec $DAEMON -- $DAEMON_OPTS
            errcode=$?
        fi
	return $errcode
}
stop_server() {
# Stop the process using the wrapper
        if [ -z "$DAEMONUSER" ] ; then
            start-stop-daemon --stop --quiet --pidfile $PIDFILE
            rm $PIDFILE
            errcode=$?
        else
# if we are using a daemonuser then look for process that match
            start-stop-daemon --stop --quiet --pidfile $PIDFILE \
                        --user $DAEMONUSER \
                        --exec $DAEMON
            errcode=$?
        fi
	return $errcode
}
reload_server() {
    [ ! -f "$PIDFILE" ] && return 1
    pid=pidofproc $PIDFILE # This is the daemon's pid
    # Send a SIGHUP
    kill -USR1 $pid
    return $?
}
force_stop() {
# Force the process to die killing it manually
	[ ! -e "$PIDFILE" ] && return
	if running ; then
		kill -15 $pid
	# Is it really dead?
		sleep "$DIETIME"s
		if running ; then
			kill -9 $pid
			sleep "$DIETIME"s
			if running ; then
				echo "Cannot kill $NAME (pid=$pid)!"
				exit 1
			fi
		fi
	fi
	rm -f $PIDFILE
}
case "$1" in
  start)
	log_daemon_msg "Starting $DESC $NAME"
        # Check if it's running first
        if running ;  then
            log_progress_msg "apparently already running"
            log_end_msg 0
            exit 0
        fi
        if start_server ; then
            # NOTE: Some servers might die some time after they start,
            # this code will detect this issue if STARTTIME is set
            # to a reasonable value
            [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time
            if  running ;  then
                # It's ok, the server started and is running
                log_end_msg 0
            else
                # It is not running after we did start
                log_end_msg 1
            fi
        else
            # Either we could not start it
            log_end_msg 1
        fi
	;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if running ; then
            # Only stop the server if we see it running
			errcode=0
            stop_server || errcode=$?
            log_end_msg $errcode
        else
            # If it's not running don't do anything
            log_progress_msg "apparently not running"
            log_end_msg 0
            exit 0
        fi
        ;;
  force-stop)
        # First try to stop gracefully the program
        $0 stop
        if running; then
            # If it's still running try to kill it more forcefully
            log_daemon_msg "Stopping (force) $DESC" "$NAME"
			errcode=0
            force_stop || errcode=$?
            log_end_msg $errcode
        fi
	;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
		errcode=0
        stop_server || errcode=$?
        # Wait some sensible amount, some server need this
        [ -n "$DIETIME" ] && sleep $DIETIME
        start_server || errcode=$?
        [ -n "$STARTTIME" ] && sleep $STARTTIME
        running || errcode=$?
        log_end_msg $errcode
	;;
  status)
        log_daemon_msg "Checking status of $DESC" "$NAME"
        if running ;  then
            log_progress_msg "running"
            log_end_msg 0
        else
            log_progress_msg "apparently not running"
            log_end_msg 1
            exit 1
        fi
        ;;
  # Use this if the daemon cannot reload
  reload)
        log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"
        log_warning_msg "cannot re-read the config file (use restart)."
        ;;
  # And this if it cann
  #reload)
          #
          # If the daemon can reload its config files on the fly
          # for example by sending it SIGHUP, do it here.
          #
          # If the daemon responds to changes in its config file
          # directly anyway, make this a do-nothing entry.
          #
          # log_daemon_msg "Reloading $DESC configuration files" "$NAME"
          # if running ; then
          #    reload_server
          #    if ! running ;  then
          # Process died after we tried to reload
          #       log_progress_msg "died on reload"
          #       log_end_msg 1
          #       exit 1
          #    fi
          # else
          #    log_progress_msg "server is not running"
          #    log_end_msg 1
          #    exit 1
          # fi
                                                                                    #;;
  *)
	#N=/etc/init.d/$NAME
	N=/opt/lampp
	echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac
exit 0

本站文章除注明转载外,均为本站原创或编译

原创文章,转载请注明:转载自jKey Blog

本文链接地址:ubuntu 上 lampp 上安装 mongodb

无觅相关文章插件,快速提升流量

anyShare分享到:
          

Tags: , , , ,



Leave a Comment