下载MongoDB
根据自己的系统下载相应的版本:MongoDB官网
安装
我下载的是linux的3.2.8版本,直接解压压缩包得出MongoDB的目录,如mongodb-3.2.8,即可使用。
启动和关闭MongoDB
以下文章中,无特殊说明则用${mongodb_home}来表示MongoDB目录
切换到${mongodb_home}/bin下,
输入以下命令,可以查看一系列MongoDB的启动可选参数,当然不同版本启动可选参数会有所不同的。
./mongod -- help
启动MongoDB
/home/mongodb-3.2.8/bin/mongod --dbpath /home/mongodb-3.2.8/data/db --port 28017 --fork
--pidfilepath /home/mongodb-3.2.8/mongodb.pid --rest --auth --logpath /home/mongodb-3.2.8/logs/mongod.log
--logappend --logRotate rename
启动参数说明:
数据库的数据保存目录,linux下默认是/data/db
--dbpath <path>
MongoDB的监听端口
--port <port>
以守护进程方式启动
--fork
MongoDB进程pid保存文件
--pidfilepath <path>
启动rest接口来访问MongoDB,比如MongoDB监听端口是27017,则可以通过http://host:28017来查看MongoDB的运行情况,rest的端口是比启动时设置端口多1000的。
--rest
开户登录认证模式
--auth
指定日志
--logpath <path>
指定日志在原来基础上累加
--logappend
logRotate的参数可以是 rename 或者reopen
--logRotate <string>
rename,旧日志文件名会加上时间戳:
<YYYY>-<mm>-<DD>T<HH>-<MM>-<SS>然后原来的文件名来保存最新的日志
在linux下,可以使用kill 命令关闭,如
kill -signal pid
kill -2 pid
此外,可以在admin数据库下,使用db.shutdownServer();使用关闭MongoDB。
主从复制
主节点
在主节点启动参数加上--master
--master
如启动命令:
/home/mongodb-3.2.8/bin/mongod --dbpath /home/mongodb-3.2.8/data/db --port 28017 --fork
--pidfilepath /home/mongodb-3.2.8/mongodb.pid
--rest --logpath /home/mongodb-3.2.8/logs/mongod.log --logappend --logRotate rename --master
从节点
在从节点启动参数加上 --slave --source <master_host><:master_port>
如启动命令:
/home/mongodb-3.2.8/bin/mongod --dbpath /home/mongodb-3.2.8/data/db --port 27017 --fork
--pidfilepath /home/mongodb-3.2.8/mongodb.pid
--rest --logpath /home/mongodb-3.2.8/logs/mongod.log --logappend --logRotate rename --slave --source 192.168.20.110:28017
如上命令,主节点是192.168.20.110:28017
注意:
在官方的3.2版本的文档中提到“主从复制”的模式已经当作不赞成的作法,见下文
Deprecated since version 3.2: MongoDB 3.2 deprecates the use of master-slave replication for components of sharded clusters.
官方建议分片集成方式的作法。
[出自:https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod]
主从客户端连接异常
使用shell客户端连接MongoDB
./bin/mongo --port 27017
> db
test
> db.foo.find();
Error: error: { "ok" : 0, "errmsg" : "not master and slaveOk=false", "code" : 13435 }
其中出现上面这个Error,解决这个Error可以使用以下命令:
> rs.slaveOk();
> db.foo.find();
{ "_id" : ObjectId("580e2df87f34ac23969dfdf8"), "name" : "lam" }
MongoDB的使用
启动了MongoDB服务后,可以在cmd命令行下,切换到bin目录下,输入mongo命令进入MongoDB的客户端命令行模式下,
mongo相关的可选项可以通过mongo --help 查看可选项,默认进入test数据库,
查看当前使用的数据库:
> db ;
查看所有的数据库:
> show dbs ;
插入一个文档(文档是MongoDB存储数据的一种类型,类型关系数据库的行)
> db.foo.insert({ 'a' : 'value of a' }) ;
查看记录
> db.foo.find();
切换数据库:
> show dbs ;
查看当前数据库的用户:
> show users ;
MongoDB的安全授权
安全授权可以用创建用户,绑定可连接IP来设置数据库的安全。
切换到admin数据库:
> use admin ;
admin数据库中的用户会被视为超级用户,即管理员,创建一个管理员:
> db.addUser( { 'root' : 'abcd'} ) ;
再切换到test数据库,创建一个只读权限用户、一个读/写权限用户:
>db.addUser( {'test_user' : 'pwd' ,true} );
>db.addUser( {'test_use2' : 'pwd' }) ;
其中第三个参数,true : 只读权限,false或不设置 :读/写权限。
此外,db.addUser不仅可以创建用户,还可以设置用户名、新密码或只读权限。
创建用户后,重启MongoDB数据库,这次启动时,启动参数加上 --auth ,开户安全检查。
在MongoDB客户端下,
用户安全认证:
>db.auth( 'test_user','pwd');
可以进行读/写操作
当然,也可以在启动客户端时,使用数据库的用户名/密码,连接数据库:
> mongo -u [user_name] -p [password] ;
...