使用

前面写过一版本是Windows的,并且很多是写死的,这次使用Mac(Linux),优化一下拓展性。

在需要启动mongodb的项目根目录下 执行此脚本:bash mac_start_mongo.sh,mongodb的数据将存放在项目根目录下的logs/中,并且每次启动重置所有状态。

效果如下 mongodb shell

看到箭头时说明启动成功,并且客户端连接成功,还需要在箭头处粘贴下面命令初始化mongo

config={_id:"rs",members:[{_id:0,host:"127.0.0.1:27001"},{_id:1,host:"127.0.0.1:27002"}]}
rs.initiate(config)

config中的rs表示副本集名称,默认rs不能修改,members表示副本集中的mongo,若修改此处members,也要一同修改脚本中的host=(127.0.0.1:27001 127.0.0.1:27002)

具体源码

#!/bin/bash

echo "if exists mongo, will shut down all mongo process"
ps -ef | grep -w mongod | grep -v grep | awk '{print $2}' | xargs kill -9
sleep 2

# if need more, add after it
host=(127.0.0.1:27001 127.0.0.1:27002)
path=`pwd`"/log/mongo/data"
logPath=`pwd`"/log/mongo/logs"

if [ ! -f $path ];then
  echo "the folder exists: ["$path"], then remove them"
  rm -rf $path
fi

# db folder name is port, unique
for(( i=0;i<${#host[@]};i++)) do
	var=${host[i]}
	port=`echo ${var##*:}`
	echo "will create default db folder for mongo data: ["$path/$port"]"
	mkdir -p $path/$port
done

if [ ! -d $logPath ];then
mkdir -p  $logPath
echo "will create default folder for mongo logs: ["$logPath"]"
else
echo "the folder exists: ["$logPath"], then remove them"
rm -rf $logPath
mkdir -p  $logPath
fi


for(( i=0;i<${#host[@]};i++)) do
var=${host[i]}
echo "mongo host: [$var]"
port=`echo ${var##*:}`
nohup mongod --port $port --oplogSize 100 --dbpath $path/$port --logpath $logPath"/$port.log" --replSet rs/$var --journal > $logPath"/mongo.log"  2>&1  &
done
echo "please wait a few for starting mongo server"

sleep 5

# use first port
var=${host[0]}
port=`echo ${var##*:}`
mongo --port $port