YiluPHP
这家伙很懒,什么都没有留下...

经验 linux下安装mongodb 3.6及安装mongodb的PHP扩展

浏览数 185840
1、下载
官网下载地址:
https://www.mongodb.com/download-center#community

命令下载地址:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.0.tgz

mkdir /software
cd /software
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.6.0.tgz

2、解压和安装
tar -zxv -f mongodb-linux-x86_64-rhel62-3.6.0.tgz
mv mongodb-linux-x86_64-rhel62-3.6.0 /usr/local/mongodb

3、
将27017端口加入防火墙,如果没有开启防火墙则不需要做此步骤
vim /etc/sysconfig/iptables
内容中增加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT

重启防火墙
service iptables restart

4、添加环境变量
vim /etc/profile
 
添加以下内容,如果原来有,则在PATH后加加冒号,再加路途
export PATH=$PATH:/usr/local/mongodb/bin

保存退出,并使之立即生效
source /etc/profile

5、创建数据与日志文件
创建mongodb数据和日志存放目录
mongodb存放数据的默认目录为/data/db
下面我们修改mongodb存放数据的默认目录
mkdir -p /data/mongodb/db

mkdir -p /logs //用此目录存放日志文件

6、启动mongodb,显示所有db数据库

执行下条命令启动mongodb
mongod --dbpath=/data/mongodb/db --logpath=/logs/mongo.log --fork

//--logpath指定日志文件存放路径,mongo.log会自动创建,--fork表示mongod服务在后台运行
如果不加--fork,那运行的进程会随着shell窗口的非正常退出而退出。

可以使用 ps -ef|grep mongo 查看进程

停止命令
mongod --shutdown --dbpath=/data/mongodb/db --logpath=/logs/mongo.log

显示所有db数据库
#mongo
>
show dbs
>
>exit;


也可以自定义一个配置文件,然后通过指定配置文件来启动mongodb
#vim /data/mongodb/mongodb.conf
输入以下内容
bind_ip = 0.0.0.0
port = 47188
dbpath = /data/mongodb/db
logpath = /logs/mongo.log
logappend = true
fork = true

保存并退出,使用以下命令启动
mongod --config=/data/mongodb/mongodb.conf
停止命令
mongod --shutdown --config=/data/mongodb/mongodb.conf

bind_ip为 0.0.0.0 表示所有ip都可以访问,默认为127.0.0.1,只能本机访问
port为端口号,普遍为27017,这里把它设置为47188


如果启动时有WARNING,可以参考这里了解原因
http://blog.51cto.com/linuxg/1895805

另外可以参考《Linux平台安装MongoDB》
http://www.runoob.com/mongodb/mongodb-linux-install.html


7、安装 MongoDB PHP扩展
在终端上安装
你可以在linux中执行以下命令来安装MongoDB 的 PHP 扩展驱动

pecl install mongo

使用php的pecl安装命令必须保证网络连接可用以及root权限。

安装过程中会提醒
Build with Cyrus SASL (MongoDB Enterprise Authentication) support?[no]:
我直接回车跳过
出现以下信息表示已经安装成功了,可以进入提示中的目录找看mongo.so文件是否存在,可能会要等几秒钟才会存在

Build process completed successfully
Installing '/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/mongo.so'
install ok: channel://pecl.php.net/mongo-1.6.16
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini

接下来按照提示,在php.ini中引入扩展,重启php-fpm即可


==============================================
mongodb开启安全验证,必须使用账号和密码登录

  1. 使用命令行登录mongodb
    mongo 127.0.0.1:47188
  2. 选择想要授权的的数据库,假设我们想创建用户root,密码为123456,可以访问数据库的名称为yourdbname
    use yourdbname
    网上有人说一定要在想要授权的数据库下创建用户才有用,我没有测试这个的准确性,直接这样做了
  3. 创建用户
    db.createUser({user:"root",pwd:"123456",roles:[ { role: "readWrite", db: "famlink_tables" },{ role: "dbAdmin", db: "famlink_tables" }]})
  4. 验证账号的有效性
    db.auth("root","123456")
    如果验证通过会返回1,不通过则返回0
  5. 这样账号就创建了,退出命令行下的mongodb
  6. 停止mongodb
    mongod --config=/data/mongodb/mongodb.conf --shutdown
  7. 再次启动mongodb时,要求一定要账号授权才能登录
    mongod --config=/data/mongodb/mongodb.conf --auth
  8. 在命令行下登录试试
    mongo 127.0.0.1:47188/yourdbname -uroot -p
    回车后输入密码就可以登录成功了
==================================================================
具体解释一下db.createUser()方法的用法

定义:

创建一个数据库新用户用db.createUser()方法,如果用户存在则返回一个用户重复错误。


语法:
db.createUser(user, writeConcern)
user这个文档创建关于用户的身份认证和访问信息;
writeConcern这个文档描述保证MongoDB提供写操作的成功报告。

· user文档,定义了用户的以下形式:
{ user: "",
pwd: "",
customData: { },
roles: [
{ role: "", db: "" } | "",
...
]
}

user文档字段介绍:
user字段,为新用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;
在roles字段,可以指定内置角色和用户定义的角色。

Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system
PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。

· writeConcern文档(官方说明)
w选项:允许的值分别是 1、0、大于1的值、"majority"、
j选项:确保mongod实例写数据到磁盘上的journal(日志),这可以确保mongd以外关闭不会丢失数据。设置true启用。
wtimeout:指定一个时间限制,以毫秒为单位。wtimeout只适用于w值大于1。

例如:在products数据库创建用户accountAdmin01,并给该用户admin数据库上clusterAdmin和readAnyDatabase的角色,products数据库上readWrite角色。
use products
db.createUser( { "user" : "accountAdmin01",
"pwd": "cleartext password",
"customData" : { employeeId: 12345 },
"roles" : [ { role: "clusterAdmin", db: "admin" },
{ role: "readAnyDatabase", db: "admin" },
"readWrite"
] },
{ w: "majority" , wtimeout: 5000 } )

验证:
mongo -u accountAdmin01 -p yourpassward --authenticationDatabase products


查看mongodb的最大连接数、当前连接数,使用命令:db.serverStatus().connections;
会显示出:{ "current" : 265, "available" : 19735, "totalCreated" : 556 }
其中 current + available = 最大连接数,最大连接数在启动时加上参数--maxConns=20000或者在 /data/mongodb/mongodb.conf (我自己建的配置文件添加 maxConns=20000),重启mongodb生效
如果你设置了需要使用账号和密码登录,则登录的用户需要有admin数据库的访问权限才行。
以下为创建一个有admin数据库访问权限的用户
1) 停止当前mongodb,再次启动时使用无需账户验证模式,这样就可以不用账号密码登录,并且权限为最大
mongod --config=/data/mongodb/mongodb.conf --shutdown
mongod --config=/data/mongodb/mongodb.conf

2) 登录mongodb
mongo 127.0.0.1:47188

3)新建一个角色,比如叫 sysadmin,需要先切换到admin库进行如下操作:
> use admin
switched to db admin
> db.createRole({role:'sysadmin',roles:[],
privileges:[
{resource:{anyResource:true},actions:['anyAction']}
]})

4)然后,新建一个用户,使用这个角色,注意,这个角色的db是admin,操作如下:
> use woplus
switched to db woplus
> db.createUser({
user:'owp',
pwd:'oneWayPhp.com',
roles:[
{role:'sysadmin',db:'admin'}
]})

5) 停止mongodb,再次启动时采用需要账号验证模式
mongod --config=/data/mongodb/mongodb.conf --shutdown
mongod --config=/data/mongodb/mongodb.conf --auth

6) 现在用这个新建的用户认证登录,就可以正常执行了
# mongo 127.0.0.1:47188/admin -uowp -p
> db.serverStatus().connections;
{ "current" : 269, "available" : 19731, "totalCreated" : 574 }
参考文章:
https://www.cnblogs.com/valor-xh/p/6369432.html
https://www.cnblogs.com/zengguowang/p/5573947.html
https://www.cnblogs.com/jinxiao-pu/p/7121307.html
https://blog.csdn.net/zwq912318834/article/details/80570998
https://blog.csdn.net/u010523770/article/details/54599548
https://www.cnblogs.com/yzf666/p/6379142.html
mongodb常用命令
https://blog.csdn.net/piaocoder/article/details/52384756
我来说说