本文主要讲下面几点:
在CentOS下安装mongo的过程
安装完成后,本地访问mongo以及在mongo shell下基础的mongo管理命令
无法远程访问mongo的解决方法
本文环境
mongo的官方文档[1]中给出了详细的安装步骤,我这里跳过了部分步骤,一切按照default的配置来安装。
我们每次运行yum install时,它都会解析/etc/yum.repos.d
下所有以.repo结尾的配置文件,这些配置文件指定了yum服务器的地址。
将如下内容写入到/etc/yum.repos.d/mongodb-org-4.2.repo
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
打开文件时,需要加sudo,才可以保存
sudo vim /etc/yum.repos.d/mongodb-org-4.2.repo
sudo yum install -y mongodb-org
sudo service mongod start
与之类似的另一条常用命令是“重启”,如果修改了某些配置,就需要重启mongo。
sudo service mongod restart
若启动成功,在/var/log/mongodb/mongod.log
中,能查看到启动的log,以及端口,配置文件位置的输出。
默认的配置文件和端口为/etc/mongod.conf, 27017。
在安装mongo的服务器本地,执行mongo命令,就能进入mongo shell。
$ mongo
MongoDB shell version v4.2.0
connecting to: mongodb://127.0.0.1:27017/
Implicit session: session { "id" : UUID("xx-xxx-x-xx-xxx") }
>
在shell中,可以使用命令来管理mongo。
初次安装的mongo,为了能让它被远程连接,也需要跟随如下步骤依次进行配置。
> show dbs
> use
> show collections
在执行这条命令前,需要用上一条“use”命令,选中某个db。
> show users
在执行这条命令前,需要用上一条“use”命令,选中某个db。才能用本条命令查看使用某个db的所有用户。
mongo没有提供创建DB的命令[3]。为了能对mongo添加用户名和密码,我们只能在默认的admin这个DB上创建用户。
> use admin
> db.createUser( { user: "test", pwd: "test", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] })
在某个DB下,添加一个叫做test的collection。
> db.createCollection('test')
{ "ok" : 1 }
在执行这条命令前,需要用上一条“use”命令,选中某个db。
> db.test.insertOne( {"_id":11, "key":"value"} )
在执行这条命令前,需要用上一条“use”命令,选中某个db。
在某个DB的collection中查找’key’=='value’的内容:
> db.test.find( {'key':'value'} )
{ "_id" : 10, "key" : "value" }
{ "_id" : 11, "key" : "value" }
{ "_id" : 12, "key" : "value" }
首次安装后,mongo可以在本地用上面的命令进行访问,但无法在远程的GUI或python代码中链接,远程访问报错如下:
No connection could be made because the target machine actively refused it
这是一个网络问题,应该从如下几点来解决:
查看防火墙状态,必须是关闭状态(如下)
$ firewall-cmd --state
not running
若不是关闭状态,用如下命令关闭防火墙
$ systemctl stop firewalld.service
查看selinux的状态,必须为关闭(如下)
$ sestatus
SELinux status: disabled
若不是关闭状态,用如下命令关闭
临时关闭
$ setenforce 0
永久关闭
$ sudo vim /etc/selinux/config
SELINUX=disabled
$ sudo rm /var/lib/mongodb/mongod.lock
$ sudo service mongodb restart
在/var/log/mongodb/mongod.log
中,能查看到启动的log,以及配置文件位置的输出。默认的配置文件为/etc/mongod.conf
。
将 bind_ip = 127.0.0.1 改为 bind_ip = 0.0.0.0 即可。
Studio 3T for MongoDB,是一个比较好用的Mongo GUI工具。
首次创建的MongoDB,使用GUI工具连接前,必须要使用db.createUser
添加用户(见上面的2.5),然后就可以用这个用户名和密码进行访问了。
在Studio 3T中,就可以“Add Database”,或者在某个DB中添加用户并为其设置读写权限了(右键,“Manage Users”)。
可以使用如下python代码来测试mongo远程连接是否成功。
import pymongo
host = "10.x.x.x:27017"
dbname="test"
username = "test"
password = "test"
client = pymongo.MongoClient(host)
client.the_database.authenticate(username, password, source=dbname)
db = client[dbname]
print(db.list_collection_names())
更多pymongo示例代码见我的github [4]