# MongoDB in Window Server ###### tags: `Tag(MongoDB)` #### Env : window server 2019 VM : Mac VM Fusion ### Step 1: Get Files from MongDB website 注意版次及安裝格式 - MongoDB Community Server ➜ [官網下載頁面](https://www.mongodb.com/try/download/community) ![](https://i.imgur.com/Jea5HJS.png =300x) - MongoDB 管理工具 Download ➜ [官網下載頁面](https://www.mongodb.com/try/download/database-tools) - MongoDB Shell Download ➜ [官網下載頁面](https://www.mongodb.com/try/download/shell) - MongoDB compass Download ➜ [官網下載頁面](https://www.mongodb.com/try/download/compass) ### Step 2: mongodb 基本安裝 建議以window server下,以admin角色進行安裝及設定修改。 4.1 安裝參考網頁 ➜ [官網](https://www.mongodb.com/docs/v5.0/tutorial/install-mongodb-on-windows/) 4.2 預設設定檔位置 <install directory>\bin\mongod.cfg 4.3 安裝 mongodb安裝文件 as a Windows service > 雙擊 mongodb安裝文件 .msi file > Run the service as Network Service user (Default) ![](https://i.imgur.com/JnPixfj.png =300x) > Data Directory 修改為客戶指定目錄 > Log Directory 修改為客戶指定目錄 4.4 服務啟動 如安採”Installed MongoDB as a Windows Service”,則會安裝後自動運行服務。 # 確認 mongod 運行 takslist ![](https://i.imgur.com/6gw1Suz.png) > 使用 mongo 連入 mongodb ![](https://i.imgur.com/dnFOwPJ.png) ![](https://i.imgur.com/WfZUA6N.png) > 服務運行確認: Window/Linux: 命令提示字元輸入「telnet + IP 位址或主機名稱 + 連接埠號碼」(例如:telnet www.example.com 1723 或 telnet 10.17.xxx.xxx 5000),以執行 Telnet 指令並測試 TCP 連接埠狀態 若連接埠開啟,Window僅會顯示游標。 若連接埠關閉,會顯示 Connect failed 訊息。 在 Mac 電腦上 輸入「nc -zv + IP 位址或主機名稱 + 連接埠號碼」(例如:nc -zv www.synology.com 443 或 nc -zv 10.17.xxx.xxx 5000),以執行 Telnet 指令並測試連接埠狀態 相關指令參考 ➜ [連接](https://kb.synology.com/zh-tw/DSM/tutorial/Whether_TCP_port_is_open_or_closed#x_anchor_id55) ### Step 3: mongodb 相關設定調整 3.0 建立對應目錄: 例如c下opt下mongodb: C:\opt\mongodb\log C:\opt\mongodb\data C:\opt\mongodb\data\ra31000 若 rs: 另外調整rs相關設定並加上keyfile C:\Program Files\MongoDB\Server\5.0\bin\Ra.keyfile > 設定檔修改內容 ![](https://i.imgur.com/NAvlCFM.png) > 設定檔參考 # mongod.conf 註: 要是更換設定檔設定(如pid),若發生錯誤,須清除data下相mongodb生成文件。 # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: C:\opt\mongodb\data directoryPerDB: true engine: wiredTiger journal: enabled: true wiredTiger: engineConfig: cacheSizeGB: 1 directoryForIndexes: true # where to write logging data. systemLog: destination: file logAppend: true logRotate: reopen path: C:\opt\mongodb\log\mongod.log # network interfaces net: port: 31000 bindIp: 127.0.0.1,WIN-BVMH438QON0 #bindIp: 0.0.0.0 processManagement: pidFilePath: C:\opt\mongodb\data\ra31000\ra31000.pid security: authorization: enabled #keyFile: C:\Program Files\MongoDB\Server\5.0\bin\Ra.keyfile #operationProfiling: #replication: #sharding: ## Enterprise-Only Options: #auditLog: #snmp: 註: cacheSizeGB: (#max_mem/2) - 1 安裝設定基本範例 : ![](https://i.imgur.com/9OsriKr.png) > 確認 hostname hostname 註: 增加設定檔處,網路項目mongodb服務ip綁定位置 > 重啟服務 ![](https://i.imgur.com/V6sd4bk.png) 在圖片藍色標系處之mongodb服務,選用對應狀態 ### Step 4: Check firewall 設定 在window,擬對往返mongod.exe实例的流量, 針對port方式進行,指令如下 netsh advfirewall firewall add rule name="Open mongod port 27017" dir=in action=allow protocol=TCP localport=27017 该规则允许所有传入的通信流到port 27017,这允许应用程序服务器连接到 mongod.exe实例。 Windows防火墙还允许为整个应用程序而不是特定端口启用网络访问,可依參考文件進行。 參考文件 ➜ [中文官網](https://mongodb.net.cn/manual/tutorial/configure-windows-netsh-firewall/) 或者,手動安裝設定 => search firewall => 輸入規則 ![](https://i.imgur.com/1JpqVRB.png) 註: window server 外ping功能 ![](https://i.imgur.com/SrWUyU6.png) ### Step 5: mongoDB 角色設定 確認mongodb相關設定完成且能正常運作後,再建行角色設定。 在mongo shell 執行下列動作: > #建立資料庫管理者角色 use admin db.createUser( { user: "admin", pwd: "admin123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); > or # 或建立超級使用者 root use admin db.createUser( { user: "admin", pwd: "admin123", roles: [ { role: "root", db: "admin" } ] }); 或簡略: db.creatUser({user: 'admin', pwd:'admin123', roles:['root']}) > 之後,再使用db.auth(),取得權限來建立其他角色,如專供資料庫資料讀寫用角色。 > db.auth('*帳號*','*密碼*') db.createUser({user:'apuser', pwd:'apuser123', roles:['readWriteAnyDatabase']}) > 確定使用者清單 show users ![](https://i.imgur.com/xm6EtHW.png) 更改帳戶密碼: db.changeUserPassword('apuser','123456'); 註:改完後,不會有"設定更改完成"msg,請登出帳號後,重登入驗証修改成功。 > 更改帳戶參數 db.updateUser( "reportUser256", { mechanisms: [ "SCRAM-SHA-256" ] } ) - 更多請參考 ➜ [官網連結](https://www.mongodb.com/docs/v5.0/reference/method/db.updateUser/) 刪除使用者 db.dropUser(username, writeConcern) ex: db.dropUser("reportUser1", {w: "majority", wtimeout: 5000}) ### Step 6: 連入mongodb 6.1 使用 mongo 下圖,用的預設mongodb port ![](https://i.imgur.com/AzLou31.png) 若有採自設port,則需加進,例如: mongo --port 31000 admin -u apuser 若發生錯誤,需把對應mongo檔案目錄,設進環境變數。如: C:\Program Files\MongoDB\Server\5.0\bin ![](https://i.imgur.com/Ochbzyl.png) ![](https://i.imgur.com/t7r5JxW.png) ![](https://i.imgur.com/jgH4qV6.png) ![](https://i.imgur.com/ADdjrZO.png) 6.2 使用 mongosh 安裝mongosh後 mongosh admin -u admin mongosh admin -u apuser 輸入密碼後即可登入使用mongodb mongosh admin -u apuser --port 27017 --host 192.168.X.X 更多mongodb 連線細節 ➜ [官網](https://www.mongodb.com/docs/manual/reference/connection-string/) 更多mongosh 用法 ➜ [官網](https://www.mongodb.com/docs/mongodb-shell/connect/#std-label-mdb-shell-connect) 6.3 使用 mongodb compass 連入 透過 mongodb compass 登入 ![](https://i.imgur.com/d68LiJS.png) 外部透過mongodb compass 登入 ![](https://i.imgur.com/RPEdf2S.png) ### Step 7: mongodb log logrotate 提示: window server 所用logRotate套件為第三方套件且久未更新,諸多功能多有限制或不足之處。 7.0 下載並安裝:logrotatewin https://sourceforge.net/projects/logrotatewin/files/ 安裝目錄: C:\opt\logrotate 7.1 設定logrotate 環境變數 設定位置=> 控制台\使用者帳戶\使用者帳戶 ![](https://i.imgur.com/t8d7UDA.png) 7.2 設定mongodb config 關閉 mongodb服務 對 mongod.cfg 進行新增下列 logAppend: true logRotate: reopen 刪除 mongod.log 重啟 mongodb服務 7.3 設定 logRotate服務 預設設定檔位置(或可以搬出放置在外層): C:\opt\LogRotate\Content\logrotate.conf # 加上以下內容 注意程式對應位置要正確 # 要被切分的log位置 C:\opt\mongodb\log\mongod.log { nocompress daily size 100m missingok rotate 9 postrotate # 調用與mongodb互動腳本 C:\opt\logrotate\notify_mongodb_service.bat endscript } 註: 視需求作調整,但是別期望能完全如linux的logrotate操作指令 註: 網路提示,rotate檔案數量不要超過9,會發生錯誤 7.4 建立執行mongoDB logRotate指令執行檔 檔案名: notify_mongodb_service.bat #加上以下內容(帳密要注意 check) mongo admin --port 31000 -u admin -p admin123 --eval "db.adminCommand({ logRotate: 1 })" 註: 目錄中別帶上任何中文文字 7.5 測試 logroate 確定腳臺及對應mongodb log生成無誤,執行: logrotate C:\opt\LogRotate\Content\logrotate.conf -f ![](https://i.imgur.com/DhpIqfx.png) 7.6 設定window server排程 7.6.1 為了方便測試及使用,可以建立bat檔(task_mongodb_logrotate.bat),內容如下: logrotate C:\opt\LogRotate\Content\logrotate.conf -f 註: 路徑別含任何中文文字 7.6.2 在window 排程中排入設定(win版次間地雷很多,實測久點) > search : task => 工作排程器 > 建立工作排程 參考設定: ![](https://i.imgur.com/Q3YUtrZ.png) ![](https://i.imgur.com/ZYhkX5y.png) ![](https://i.imgur.com/vicRIfo.png) ![](https://i.imgur.com/RJVspn3.png) ![](https://i.imgur.com/DaB5von.png) >可使用工程器程式庫中的重新整理及執行來驗証執行狀況。 確定成功執行 ![](https://i.imgur.com/p1x6nUA.png) ![](https://i.imgur.com/5OUEF4E.png) 註: 別忘了測試成功後,把時間改回半夜12點。 官網: https://www.mongodb.com/docs/manual/reference/command/logRotate/ 參考: https://stackoverflow.com/questions/67079426/mongo-log-rotation-does-not-work-on-windows ### step 8: mongodb服務關閉或重啟 關閉服務 net shutdown mongodb or 連入資料庫後,執行: db.shutdownServer({timeoutSecs : 5}) 重啟服務: net start mongodb 註:別同時使用mongoshell跟net 開啟或關閉服務,容易發生沖突lock。 - And MORE ➜ [HackMD Tutorials](https://hackmd.io/c/tutorials)