使用
前面写过一版本是Windows的,并且很多是写死的,这次使用Mac(Linux),优化一下拓展性。
在需要启动mongodb的项目根目录下 执行此脚本:bash mac_start_mongo.sh
,mongodb的数据将存放在项目根目录下的logs/中,并且每次启动重置所有状态。
效果如下
看到箭头时说明启动成功,并且客户端连接成功,还需要在箭头处粘贴下面命令初始化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