天天看點

CentOS6安裝mongoDB3.2.9

一、MongoDB的安裝

1、下載下傳 

<code>cd /data/packages</code>

<code>wget https:</code><code>//fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.9.tgz</code>

2、解壓 

<code>tar zxvf mongodb-linux-x86_64-rhel62-</code><code>3.2</code><code>.</code><code>9</code><code>.tgz</code>

<code>mv mongodb-linux-x86_64-rhel62-</code><code>3.2</code><code>.</code><code>9</code> <code>/data/mongodb </code>

<code>cd /data/mongodb/</code>

<code>mkdir -p /data/mongodb/data    #目錄中建立一個存放資料檔案的目錄:</code>

<code>mkdir -p /data/mongodb/logs   #目錄中建立一個存放日志的目錄:</code>

<code>touch /data/mongodb/logs/mongodb.log</code>

<code>cd bin/</code>

3、編輯配置檔案: 

<code>vim mongodb.conf 輸入以下内容: </code>

<code># idae - MongoDB config start - </code><code>2016</code><code>-</code><code>08</code><code>-</code><code>26</code>

<code>dbpath=/data/mongodb/data   # 設定資料檔案的存放目錄</code>

<code>logpath=/data/mongodb/logs/mongodb.log  # 設定日志檔案的存放目錄及其日志檔案名</code>

<code>bind_ip=</code><code>0.0</code><code>.</code><code>0.0</code> 

<code>port=</code><code>27017</code>    <code># 設定端口号(預設的端口号是 </code><code>27017</code><code>)</code>

<code>fork=</code><code>true</code>       <code># 設定為以守護程序的方式運作,即在背景運作</code>

<code>nohttpinterface=</code><code>true</code>

<code># idae - MongoDB config end - </code><code>2016</code><code>-</code><code>08</code><code>-</code><code>26</code>

<code>參數解釋: </code>

<code>--dbpath 資料庫路徑(資料檔案)</code>

<code>--logpath 日志檔案路徑</code>

<code>--master 指定為主機器</code>

<code>--slave 指定為從機器</code>

<code>--source 指定主機器的IP位址</code>

<code>--pologSize 指定日志檔案大小不超過64M.因為resync是非常操作量大且耗時,最好通過設定一個足夠大的oplogSize來避免resync(預設的 oplog大小是空閑磁盤大小的</code><code>5</code><code>%)。</code>

<code>--logappend 日志檔案末尾添加,即使用追加的方式寫日志</code>

<code>--journal 啟用日志</code>

<code>--port 啟用端口号</code>

<code>--fork 在背景運作</code>

<code>--only 指定隻複制哪一個資料庫</code>

<code>--slavedelay 指從複制檢測的時間間隔</code>

<code>--auth 是否需要驗證權限登入(使用者名和密碼)</code>

<code>--syncdelay 資料寫入硬碟的時間(秒),</code><code>0</code><code>是不等待,直接寫入</code>

<code>--notablescan 不允許表掃描</code>

<code>--maxConns 最大的并發連接配接數,預設</code><code>2000</code>  

<code>--pidfilepath 指定程序檔案,不指定則不産生程序檔案</code>

<code>--bind_ip 綁定IP,綁定後隻能綁定的IP通路服務</code>

4、建立新的賬号: 

<code>groupadd mongodb </code>

<code>useradd mongodb -g mongodb </code>

<code>chown -R mongodb:mongodb /data/mongodb</code>

<code>ln -s /data/mongodb/bin/mongo /usr/bin/mongo</code>

5、啟動: 

<code>/data/mongodb/bin/mongod  --config /data/mongodb/bin/mongodb.conf</code>

 a.報錯:/lib64/libc.so.6: version `GLIBC_2.14' not found ,原因是glibc版本太低,軟體編譯時使用了較高版本的glibc引起的

 b.報錯:[main] Failed global initialization: BadValue: Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.

    解決:設定下環境變量就好了:   # export LC_ALL=C

-檢視 mongodb 程序:

<code>ps aux |grep mongodb</code>

-檢視 mongodb 服務的運作日志:

<code>tail -100f /data/mongodb/logs/mongodb.log</code>

-檢查端口是否已被啟動:

<code>netstat -lanp | grep </code><code>27017</code>

-殺死 mongodb 程序,即可關閉 mongodb 服務:

<code>kill -</code><code>15</code> <code>PID</code>

6、設定開機自動啟動mongodb 

方法有二:

1、把這句話寫到把 /etc/rc.local,即可開機啟動。

<code>echo /data/mongodb/bin/mongod  --config /data/mongodb/bin/mongodb.conf &gt;/etc/rc.d/rc.local</code>

第二種:

2、将一個腳本放到/etc/init.d/

比如,命名為/etc/init.d/mongodb,則執行以下步驟即可:

1)要給它們賦予執行權限:

<code>chmod +x /etc/init.d/mongodb</code>

2)接着試一下是否可以啟動、停止:

<code>service mongodb start</code>

<code>service mongodb stop</code>

3)最後設為開機啟動:

<code>chkconfig mongodb on</code>

<code>#!/bin/bash</code>

<code># mongod - Startup script </code><code>for</code> <code>mongod</code>

<code># chkconfig: </code><code>35</code> <code>80</code> <code>15</code>

<code># description: Mongo is a scalable, document-oriented database.</code>

<code># processname: mongod</code>

<code># config: /data/mongodb/conf/mongod.conf</code>

<code># pidfile: /var/run/mongo/mongo.pid</code>

<code>source /etc/rc.d/init.d/functions</code>

<code># things from mongod.conf get there by mongod reading it</code>

<code>if</code> <code>[ $(id -u) != </code><code>"0"</code> <code>]; then</code>

<code>    </code><code>echo </code><code>"Permission Denied! Please use root to run again!"</code>

<code>    </code><code>exit </code><code>1</code>

<code>fi</code>

<code>test -d /var/run/mongodb || (mkdir -p /var/run/mongodb ; chown mongod:mongod /var/run/mongodb)</code>

<code># NOTE: </code><code>if</code> <code>you change any OPTIONS here, you get what you pay </code><code>for</code><code>:</code>

<code># </code><code>this</code> <code>script assumes all options are in the config file.</code>

<code>CONFIGFILE=</code><code>"/data/mongodb/conf/mongodb.conf"</code>

<code>SYSCONFIG=</code><code>"/etc/sysconfig/mongod"</code>

<code>export PATH=$PATH:/data/mongodb/bin</code>

<code>DBPATH=`awk -F= </code><code>'/^dbpath/{print $2}'</code> <code>"$CONFIGFILE"</code><code>`</code>

<code>OPTIONS=</code><code>" --config $CONFIGFILE"</code>

<code>mongod=</code><code>"/data/mongodb/bin/mongod"</code>

<code>echo </code><code>"db path is: "</code><code>$DBPATH</code>

<code>echo $mongod</code>

<code>MONGO_USER=mongodb</code>

<code>MONGO_GROUP=mongodb</code>

<code>[ -r </code><code>"$SYSCONFIG"</code> <code>] &amp;&amp; source </code><code>"$SYSCONFIG"</code>

<code>  </code> 

<code>super</code><code>() {</code>

<code>    </code><code>su - $MONGO_USER -c </code><code>"PATH=$PATH::/data/mongodb/bin; $*"</code>

<code>}</code>

<code>start()</code>

<code>{</code>

<code>  </code><code>echo -n $</code><code>"Starting mongod: "</code>

<code>#  daemon --user </code><code>"$MONGO_USER"</code> <code>"numactl --interleave=all"</code> <code>$mongod $OPTIONS</code>

<code>#daemon --user </code><code>"$MONGO_USER"</code> <code>$mongod $OPTIONS</code>

<code>#</code>

<code>#   su - $MONGO_USER -c </code><code>"$mongod $OPTIONS"</code> <code>-m -p</code>

<code>#  su - $MONGO_USER</code>

<code>  </code><code>$mongod $OPTIONS</code>

<code>#  </code><code>super</code> <code>$mongod $OPTIONS</code>

<code>  </code><code>echo $mongod$OPTIONS</code>

<code>  </code><code>RETVAL=$?</code>

<code>  </code><code>echo</code>

<code>  </code><code>[ $RETVAL -eq </code><code>0</code> <code>] &amp;&amp; touch /var/lock/subsys/mongod</code>

<code>stop()</code>

<code>  </code><code>echo -n $</code><code>"Stopping mongod: "</code>

<code>  </code><code>killproc -p </code><code>"$DBPATH"</code><code>/mongod.lock -d </code><code>300</code> <code>/data/mongodb/bin/mongod</code>

<code>  </code><code>[ $RETVAL -eq </code><code>0</code> <code>] &amp;&amp; rm -f /var/lock/subsys/mongod</code>

<code>restart () {</code>

<code>        </code><code>stop</code>

<code>        </code><code>start</code>

<code>ulimit -n </code><code>12000</code>

<code>RETVAL=</code><code>0</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>  </code><code>start)</code>

<code>    </code><code>start</code>

<code>    </code><code>;;</code>

<code>  </code><code>stop)</code>

<code>    </code><code>stop</code>

<code>  </code><code>restart|reload|force-reload)</code>

<code>    </code><code>restart</code>

<code>  </code><code>condrestart)</code>

<code>    </code><code>[ -f /var/lock/subsys/mongod ] &amp;&amp; restart || :</code>

<code>  </code><code>status)</code>

<code>    </code><code>status $mongod</code>

<code>    </code><code>RETVAL=$?</code>

<code>  </code><code>*)</code>

<code>    </code><code>echo </code><code>"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"</code>

<code>    </code><code>RETVAL=</code><code>1</code>

<code>esac</code>

<code>exit $RETVAL</code>

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、使用者授權和管理

1、進入mongodb的shell模式: 

<code>/usr/bin/mongo</code>

檢視資料庫清單: 

<code>show dbs</code>

檢視目前db版本: 

<code>db.version();</code>

2、增加管理者權限:

userAdminAnyDatabase 這個角色擁有配置設定角色和使用者的權限,但沒有查寫的缺陷 

root 這是超級管理者 

readWrite 有讀寫權限 

read 有讀權限

進入shell模式: 

<code>&gt; use admin </code><code>//切換到admin資料庫</code>

<code>&gt; db.createUser(</code>

<code>... {</code>

<code>... user:</code><code>"root"</code><code>,</code>

<code>... pwd:</code><code>"test123"</code><code>,</code>

<code>... roles:[{role:</code><code>"root"</code><code>,db:</code><code>"admin"</code><code>}]</code>

<code>... }</code>

<code>... );</code>

<code>Successfully added user: {</code>

<code>        </code><code>"user"</code> <code>: </code><code>"root"</code><code>,</code>

<code>        </code><code>"roles"</code> <code>: [</code>

<code>                </code><code>{</code>

<code>                        </code><code>"role"</code> <code>: </code><code>"root"</code><code>,</code>

<code>                        </code><code>"db"</code> <code>: </code><code>"admin"</code>

<code>                </code><code>}</code>

<code>        </code><code>]</code>

<code>&gt;</code>

<code>&gt; db.createUser( </code>

<code>... { </code>

<code>... user: “mongoRoot”, </code>

<code>... pwd: “testMongoDB2016”, </code>

<code>... roles:[{role:”userAdminAnyDatabase”, db:”admin”}] </code>

<code>... } </code>

驗證一下,在哪裡注冊使用者的要去哪個db裡認證: 

<code>db.auth(“mongoRoot”, “testMongoDB2016”)</code>

此後可以用這個mongoRoot賬号去建立某一資料庫管理賬号: 

<code>&gt; db.createUser({user:</code><code>"test1"</code><code>,pwd:</code><code>"test123"</code><code>,roles:[{</code><code>"role"</code><code>:</code><code>"readWrite"</code><code>,</code><code>"db"</code><code>:</code><code>"test1"</code><code>}]})</code>

但發現此時增加的賬号不能在用戶端登入,原因是mongodb版本錯了: 

先退出 mongod 服務

use admin 

db.auth(“root”, “testMongoDB2016”) 

db.shutdownServer() 

再在無認證情況下打開 mongod 

db.dropUser(“hhq163”) 

db.system.version.update({ “_id”:”authSchema”},{$set:{“currentVersion”:3}}) 

db.createUser({user:”hhq163”,pwd:”test123456”,roles:[{“role”:”readWrite”,”db”:”admin”}]}) 

再以認證的形式啟動mongodb

如果需要建立某一個新DB的賬号: 

需要在shell下執行: 

use TestDB 

db.createUser({user:”hhq163”,pwd:”test123456”,roles:[{“role”:”readWrite”,”db”:”TestDB”}]})

vim /usr/local/mongodb/bin/mongodb.conf 

在檔案末尾增加以下這一行: 

auth=true

8、關閉資料庫伺服器: 

db.shutdownServer()

如果開戶安全認證,則要先認證: 

本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1843040如需轉載請自行聯系原作者

qianghong000