折腾:
【已解决】把本地的音频字幕等数据存储到远程服务器的MongoDB数据库中
期间,需要去为了Mac本地去连接这个远程的阿里云ECS服务器中的MongoDB,需要搞清楚这台服务器中MongoDB的端口和用户名和密码
IP应该就是这个主机的外网IP:x.x.x.x
而用户名和密码,去
mongodb 用户名和密码
服务器中看了看版本:
<code>[root@naturling-general-01 ~]# mongo mongo mongod mongodump mongoexport mongofiles mongoimport mongooplog mongoperf mongorestore mongos mongostat mongotop [root@naturling-general-01 ~]# which mongo /usr/bin/mongo [root@naturling-general-01 ~]# which mongod /usr/bin/mongod [root@naturling-general-01 ~]# mongo --version MongoDB shell version: 3.2.19 [root@naturling-general-01 ~]# mongod --version db version v3.2.19 git version: a9f574de6a566a58b24d126b44a56718d181e989 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 allocator: tcmalloc modules: none build environment: distmod: rhel70 distarch: x86_64 target_arch: x86_64 </code>
是3.2.19的
本地Mac试了半天,连不上外网默认端口:
<code>➜ Homebrew git:(stable) telnet x.x.x.x 27017 Trying x.x.x.x... ^C </code>
这个倒是希望的。
不过需要确认当前是否真的已经运行了MongoDB的服务了:
【已解决】确认服务器是否已经正在运行MongoDB的服务mongod
看了半天,结果变成了:
发现服务器中的MongoDB的用户名和密码是没有的。
需要自己去新建用户才行:
然后也先要解决:
但是发现了:
只绑定到了本机IP,只运行本机访问:
<code>[root@naturling-general-01 ~]# cat /etc/mongod.conf # mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log # Where and how to store data. storage: dbPath: /var/lib/mongo journal: enabled: true # engine: # mmapv1: # wiredTiger: # how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile # network interfaces net: port: 27017 bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces. #security: #operationProfiling: #replication: #sharding: ## Enterprise-Only Options #auditLog: #snmp: [root@naturling-general-01 ~]# </code>
所以外网无法访问。
然后试了试服务器本机,是可以访问和操作的:
<code>[root@naturling-general-01 ~]# mongo
MongoDB shell version: 3.2.19
connecting to: test
Server has startup warnings:
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten]
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten]
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten]
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 4096 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
2018-03-20T22:05:01.142+0800 I CONTROL [initandlisten]
> show dbs
local 0.000GB
> help
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.foo.find() list objects in collection foo
db.foo.find( { a : 1 } ) list objects in foo where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shell
> use local
switched to db local
> show collections
startup_log
> db.local.find_one()
2018-04-02T09:12:10.325+0800 E QUERY [thread1] TypeError: db.local.find_one is not a function :
@(shell):1:1
> db.local.find()
> db.test.insertOne({x: 2})
{
"acknowledged" : true,
"insertedId" : ObjectId("5ac18438bcf33b2035d6269b")
}
> db.test.find()
{ "_id" : ObjectId("5ac18438bcf33b2035d6269b"), "x" : 2 }
>
</code>然后试试本地Mac能否连接上远程的Mongo
然后:
【已解决】连接远程mongoDB失败:Failed to connect to after 5000ms milliseconds giving up
另外,参考:
看看对应数据库的用户有哪些:
<code>> show users
> use admin
switched to db admin
> show users
{
"_id" : "admin.naturling",
"user" : "naturling",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "gridfs"
}
]
}
> use gridfs
switched to db gridfs
> show users
{
"_id" : "gridfs.naturling",
"user" : "naturling",
"db" : "gridfs",
"roles" : [
{
"role" : "readWrite",
"db" : "gridfs"
}
]
}
>
</code>然后尝试delete的操作看看是否正常:
然后确保了此处的用户是有读写操作的。
【总结】
此处为了知道在线的MongoDB数据库:
(1)端口的话,主要是自己在配置文件中:
<code>/etc/mongod.conf </code>
的设置:
<code># network interfaces net: port: 27017 </code>
决定的。
(2)用户名和密码
实际上发现是需要自己单独去添加的。
而添加的逻辑是:
mongo shell进去后,先切换到要添加的数据库,然后再去创建用户,设置对应的用户名、密码、操作的权限:
<code>> use gridfs
switched to db gridfs
> db.createUser({
... user: "naturling",
... pwd: "pwd",
... roles: [ { role: "readWrite", db: "gridfs"}]
... })
Successfully added user: {
"user" : "naturling",
"roles" : [
{
"role" : "readWrite",
"db" : "gridfs"
}
]
}
</code>然后再切换到对应的数据库去授权该用户,即可:
<code>> use gridfs
switched to db gridfs
> db.auth("naturling", "pwd")
1
</code>最后可以用:
<code>> use gridfs
switched to db gridfs
> show users
{
"_id" : "gridfs.naturling",
"user" : "naturling",
"db" : "gridfs",
"roles" : [
{
"role" : "readWrite",
"db" : "gridfs"
}
]
}
</code>去确定权限的确已经添加了。