1. 程式人生 > >MongoDB生產中的一次除錯

MongoDB生產中的一次除錯

 專案中使用MongoDB生產專案部署的一次除錯

我們在企業開發中或多或少都會遇到生產環境在專案部署是無法進行程式執行時的debug除錯問題,這是因為生產環境與測試環境或者開發環境都是完全隔離的如果是使用阿里雲的伺服器,生產環境都是內網通訊,本地就更沒有辦法除錯了。我這邊遇到的問題就是在測試環境中部署專案什麼問題都沒有。但是部署在生產中就出現了。資料無法寫入的情況。以下是這次除錯的過程。

首先鎖定是不是生產伺服器不能訪問生產mongodb(以下簡稱mongo),

執行命令telnet  ip port 

這裡需要確認是可以訪問同的。

如果上一步是成功的,那麼下一步需要做到可以在生產伺服器上使用shell連結到mongo

下載mongo包:curl -o mongodb-linux-x86_64-3.2.4.tgz https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.4.tgz

解壓:tar -xvf mongodb-linux-x86_64-3.2.4.tgz

執行:cd  mongodb-linux-x86_64-3.2.4/bin

目錄結構如下:

繼續執行: ./mongo

 繼續執行:./mongo 127.0.0.1:27017/test -u username -p password

可以使用help命令檢視shell命令的基本操作

接下來通過命令列shell的基本使用對test庫進行一次寫操作

使用資料庫指定:use test  

如果庫不存在會自定建立一個庫名為test的庫,如果執行這個命令是返回的資訊出現error,就需要去確認當前登入的使用者是否有許可權建立資料庫。如果嗎,沒有許可權就需要給當前使用者賦權了在進行操作。

繼續執行命令:db.sample.find()

如果出現異常就是資訊與下圖一樣,就執行命令:db.getMongo().setSlaveOk()

再次執行db.sample.find()

無異常進行下一步

db.sample.insert({name:"hahaha!"})

這裡是因為我們的mongo採用的策略是主從配置,我使用的連結是從庫的,所以異常資訊為not master 

退出當前shell: quit()

使用主庫的連結地址再次訪問mongo

show tables

裡面會有一個預設的test文件

db.test.insert({name:"hahaha"})

 db.test.find()

db.test.remove({name:"hahaha"})

 db.test.find()

退出本次除錯:quit()

除錯成功,問題鎖定在我使用的連結地址是從庫的原因,導致不能寫入資料到mongo中,換成master節點就解決了我的問題。