---
title: MongoDB副本集快速启动脚本
categories:
- 其他
tags: [bash shell,mongo db]
---


## 使用

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

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

效果如下 ![mongodb shell](../public/image/mongoshell.png)

看到箭头时说明启动成功，并且客户端连接成功，还需要在箭头处粘贴下面命令初始化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)`

## 具体源码

```shell
#!/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

```