只升级mongodb的版本极为简单,更新/替换 bin/目录下的可执行文件即可。
debian和osx上的升级,按步骤来,没什么好说的。
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian/
切换引擎就麻烦了,新引擎的性能很诱人。
对迁移引擎来说,最大的问题是文件格式不兼容
也就是说,得把旧数据全部重新导一遍。
实现方式是设旧引擎数据库为master
设新引擎数据库为slaver
执行数据同步
旧引擎库
# mongod.conf dbpath=/hdd3/mongodb logpath=/var/log/mongodb/mongod_audit.log logappend=true port = 27017 bind_ip=127.0.0.1 master=true
新引擎库
# mongod_audit_wiredtiger.confdbpath=/hdd3/mongodb_wiredtigerlogpath=/var/log/mongodb/mongod_audit_wiredTiger.loglogappend=trueport = 27030bind_ip=127.0.0.1storageEngine=wiredTigerslave=truesource=127.0.0.1:27017
/etc/init.d/mongod_audit_wiredTiger
#!/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: mongod_audit_wiretiger # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # 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) # * Automatic partitioning for cloud-level scalability # # High performance, scalability, and reasonable depth of # functionality are the goals for the project. ### END INIT INFOPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/mongod DESC=database_auditNAME=mongod_audit_wiredtiger # Defaults. Can be overridden by the /etc/default/$NAME # Other configuration options are located in $CONF file. See here for more: # http://dochub.mongodb.org/core/configurationoptions CONF=/etc/mongod_audit_wiredtiger.conf PIDFILE=/var/run/$NAME.pid ENABLE_MONGOD=yes# Include mongodb defaults if available if [ -f /etc/default/$NAME ] ; then. /etc/default/$NAME fi# Handle NUMA access to CPUs (SERVER-3574) # This verifies the existence of numactl as well as testing that the command works NUMACTL_ARGS="--interleave=all" if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null thenNUMACTL="`which numactl` -- $NUMACTL_ARGS"DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"} elseNUMACTL=""DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"} fiif test ! -x $DAEMON; thenecho "Could not find $DAEMON"exit 0 fiif test "x$ENABLE_MONGOD" != "xyes"; thenexit 0 fi. /lib/lsb/init-functionsSTARTTIME=1 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 workDAEMONUSER=${DAEMONUSER:-mongodb}set -erunning_pid() { # Check if a given process pid's cmdline matches a given namepid=$1name=$2[ -z "$pid" ] && return 1[ ! -d /proc/$pid ] && return 1cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`# Is this the expected server[ "$cmd" != "$name" ] && return 1return 0 }running() { # Check if the process is running looking at /proc # (works for all users)# No pidfile, probably no daemon present[ ! -f "$PIDFILE" ] && return 1pid=`cat $PIDFILE`running_pid $pid $DAEMON || return 1return 0 }start_server() {# Recommended ulimit values for mongod or mongos# See http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings #ulimit -f unlimitedulimit -t unlimitedulimit -v unlimitedulimit -n 64000ulimit -m unlimited# In dash, ulimit takes -p for maximum user processes# In bash, it's -uif readlink /proc/$$/exe | grep -q dashthenulimit -p 32000elseulimit -u 32000fi# Start the process using the wrapperstart-stop-daemon --background --start --quiet --pidfile $PIDFILE \--make-pidfile --chuid $DAEMONUSER \--exec $NUMACTL $DAEMON $DAEMON_OPTSerrcode=$?return $errcode }stop_server() { # Stop the process using the wrapperstart-stop-daemon --stop --quiet --pidfile $PIDFILE \--retry 300 \--user $DAEMONUSER \--exec $DAEMONerrcode=$?return $errcode }force_stop() { # Force the process to die killing it manually[ ! -e "$PIDFILE" ] && returnif running ; thenkill -15 $pid# Is it really dead?sleep "$DIETIME"sif running ; thenkill -9 $pidsleep "$DIETIME"sif running ; thenecho "Cannot kill $NAME (pid=$pid)!"exit 1fififirm -f $PIDFILE }case "$1" instart)log_daemon_msg "Starting $DESC" "$NAME"# Check if it's running firstif running ; thenlog_progress_msg "apparently already running"log_end_msg 0exit 0fiif 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 runninglog_end_msg 0else# It is not running after we did startlog_end_msg 1fielse# Either we could not start itlog_end_msg 1fi;;stop)log_daemon_msg "Stopping $DESC" "$NAME"if running ; then# Only stop the server if we see it runningerrcode=0stop_server || errcode=$?log_end_msg $errcodeelse# If it's not running don't do anythinglog_progress_msg "apparently not running"log_end_msg 0exit 0fi;;force-stop)# First try to stop gracefully the program$0 stopif running; then# If it's still running try to kill it more forcefullylog_daemon_msg "Stopping (force) $DESC" "$NAME"errcode=0force_stop || errcode=$?log_end_msg $errcodefi;;restart|force-reload)log_daemon_msg "Restarting $DESC" "$NAME"errcode=0stop_server || errcode=$?# Wait some sensible amount, some server need this[ -n "$DIETIME" ] && sleep $DIETIMEstart_server || errcode=$?[ -n "$STARTTIME" ] && sleep $STARTTIMErunning || errcode=$?log_end_msg $errcode;;status)log_daemon_msg "Checking status of $DESC" "$NAME"if running ; thenlog_progress_msg "running"log_end_msg 0elselog_progress_msg "apparently not running"log_end_msg 1exit 1fi;;# MongoDB can't reload its configuration. reload)log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon"log_warning_msg "cannot re-read the config file (use restart).";;*)N=/etc/init.d/$NAMEecho "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2exit 1;; esacexit 0