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节点就解决了我的问题。

猜你喜欢

转载自blog.csdn.net/qq_38353257/article/details/85002411