zoukankan      html  css  js  c++  java
  • 升级mongodb数据库2.6.6到3.0.3,切换引擎,主从同步数据

    只升级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.conf
    
    dbpath=/hdd3/mongodb_wiredtiger
    
    logpath=/var/log/mongodb/mongod_audit_wiredTiger.log
    
    logappend=true
    
    port = 27030
    
    bind_ip=127.0.0.1
    
    storageEngine=wiredTiger
    
    slave=true
    
    source=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 <jfs@debian.org>
    #
    # 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 INFO
    
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    DAEMON=/usr/bin/mongod
    DESC=database_audit
    
    NAME=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
    then
        NUMACTL="`which numactl` -- $NUMACTL_ARGS"
        DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"}
    else
        NUMACTL=""
        DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"}
    fi
    
    if test ! -x $DAEMON; then
        echo "Could not find $DAEMON"
        exit 0
    fi
    
    if test "x$ENABLE_MONGOD" != "xyes"; then
        exit 0
    fi
    
    . /lib/lsb/init-functions
    
    STARTTIME=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 work
    
    DAEMONUSER=${DAEMONUSER:-mongodb}
    
    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 "00" "
    "|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() {
                # Recommended ulimit values for mongod or mongos
                # See http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings
                #
                ulimit -f unlimited
                ulimit -t unlimited
                ulimit -v unlimited
                ulimit -n 64000
                ulimit -m unlimited
    
                # In dash, ulimit takes -p for maximum user processes
                # In bash, it's -u
                if readlink /proc/$$/exe | grep -q dash
                then
                        ulimit -p 32000
                else
                        ulimit -u 32000
                fi
    
                # Start the process using the wrapper
                start-stop-daemon --background --start --quiet --pidfile $PIDFILE 
                            --make-pidfile --chuid $DAEMONUSER 
                            --exec $NUMACTL $DAEMON $DAEMON_OPTS
                errcode=$?
        return $errcode
    }
    
    stop_server() {
    # Stop the process using the wrapper
                start-stop-daemon --stop --quiet --pidfile $PIDFILE 
                            --retry 300 
                            --user $DAEMONUSER 
                            --exec $DAEMON
                errcode=$?
        return $errcode
    }
    
    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
            ;;
      # 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/$NAME
        echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2
        exit 1
        ;;
    esac
    
    exit 0
    View Code

     

  • 相关阅读:
    file & iconv
    UML类图思考
    Rust PhantomData and dropck rgb
    golang recover rgb
    帮上小学的女儿写的一篇文章春夏秋冬
    SAP B1在添加物料主数据时,出现错误提示‘xxxx代码已存在’的解决方法
    SAP B1外协物料处理方法
    SAP B1外发加工件成本的处理方法(曹玉平于奥莱照明)
    SAP B1存在的BUG
    交叉表的实殃及向SQL SERVER数据库中插入数据时,出现乱码或???(问号)的解决方法。
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/4514676.html
Copyright © 2011-2022 走看看