RHEL6.7下通用二进制包如何安装MongoDB 3.2.4与mongoDB的php扩展,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
一、软件介绍
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似于json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言, 几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
面向集合存储,易存储对象类型的数据。
模式自由。
支持动态查询。
支持完全索引,包含内部对象。
支持查询。
支持复制和故障恢复。
使用高效的二进制数据存储,包括大型对象(如视频等)。
自动处理碎片,以支持云计算层次的扩展性
支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
文件存储格式为BSON(一种JSON的扩展)
可通过网络访问
MongoDB是开源文档数据库,提供共性能、高可用、自动扩展等。MongoDB中记录是文档,其是字段和值组成的对结构。MongoDB文档类似JSON对象,字段的值可以包含其它文档、数组、文档的数组。记录组织成collection,相当于表。参考下图:
使用文档的优点是:
文档对应很多编程语言的内生数据对象
内嵌文档和数组减少了join的开销
动态schema支持顺畅多态
关键功能:
高性能:
mongodb提供高性能数据持久。特别是:
支持内嵌数据模型减少了数据库系统的I/O
索引支持快速查询且内嵌文档和数组可以包含键
高可用:
mongodb提供高可用的是replica sets
自动失败切换
数据冗余
replica set是一组mongodb服务器,它们维护这同一个数据集,提供冗余,增加数据可用性。
自动水平扩展:
水平扩展是mongodb的内核功能。
在集群上自动共享分布式数据
replica sets能为低延迟,高吞吐量的应用提供最终一致性读。
二、安装环境:
[root@xuegod63 ~]# uname -a
Linux xuegod63.cn 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:37 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@xuegod63 ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 6.7 (Santiago)
Kernel \r on an \m
软件:mongodb-linux-x86_64-rhel62-3.2.4.tgz
三、下载安装
[root@xuegod63 ~]# curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz
or
[root@xuegod63 ~]# wget -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.4.tgz # 下载
[root@xuegod63 ~]# tar -zxvf mongodb-linux-x86_64-rhel62-3.2.4.tgz # 解压
[root@xuegod63 ~]# mv mongodb-linux-x86_64-rhel62-3.2.4 /usr/local/mongodb # 将解压包拷贝到指定目录
四、环境变量配置
MongoDB的可执行文件位于bin目录下,所以可以将其添加到PATH路径中:
[root@xuegod63 ~]# vim .bash_profile
PATH=$PATH:/usr/local/mongodb/bin
[root@xuegod63 ~]# source .bash_profile
五、创建数据库存放目录
MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以需要手动创建data目录,并在data目录中创建db目录。以下实例中我们将data目录创建于根目录下(/)。
注意:/data/db是MongoDB默认的启动的数据库路径(--dbpath)。
[root@xuegod63 ~]# mkdir -p /usr/local/mongondb/{data,logs}
设置ulimit -n和ulimit -u的值大于20000。如果ulimit的值设置过低的话,当MongoDB处于频繁访问的状态下,将会产生错误,最终导致无法连接到MongoDB实例。
[root@xuegod63 ~]# ulimit -n 25000
[root@xuegod63 ~]# ulimit -u 25000
六、创建用户mongo
[root@xuegod63 ~]# useradd -r mongo
[root@xuegod63 ~]# chown -R mongo:mongo /usr/local/mongondb/data/
七、添加配置文件并启动
①可以在/usr/local/mongodb/bin/目录下使用命令:
[root@xuegod63 ~]# mongod
②在/usr/local/mongodb/下创建conf目录添加配置文件
[root@xuegod63 ~]# mkdir -p /usr/local/mongodb/conf
[root@xuegod63 ~]# vim /usr/local/mongodb/conf/mongodb.conf
dbpath=/usr/local/mongodb/data //数据文件存放目录
logpath=/usr/local/mongodb/logs/mongodb.log //日志文件存放目录
bind_ip=127.0.0.1,192.168.1.63 //只允许通过局域网IP:192.168.1.63及本机访问
port=27017 //端口
fork=true //以守护进程的方式启用,即在后台运行
master=true
verbose = true
vvvv = true
maxConns = 5000 //最大同时连接数 默认2000
objcheck = true
logappend=true //使用追加的方式写日志
shardsvr=true
directoryperdb=true //每个数据库使用一个目录
nohttpinterface=true
noauth=true //不启用验证
rest=false
③手动开启服务
[root@xuegod63 ~]# mongod -f /usr/local/mongodb/conf/mongodb.conf
or
[root@xuegod63 ~]# mongod --config /usr/local/mongodb/conf/mongodb.conf
[root@xuegod63 ~]# ps -efl |grep mongod |grep -v grep
1 S root 14338 1 2 80 0 - 104363 poll_s 19:17 ? 00:00:03 mongod --config /usr/local/mongodb/conf/mongodb.conf
[root@xuegod63 ~]# netstat -tunlp |grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 14338/mongod
八、设置开机启动
方法一、添加开机脚本
①在/etc/init.d/目录下添加mongod脚本,脚本内容如下:
#!/bin/bash
#chkconfig: 2345 80 90
#description: mongodb
start() {
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
}
stop() {
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf --shutdown
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
②添加脚本执行权限
[root@xuegod63 ~]# chmod +x /etc/init.d/mongod
③设置开机启动
[root@xuegod63 ~]# chkconfig mongond --add
[root@xuegod63 ~]# chkconfig mongond on
[root@xuegod63 init.d]# service mongod restart
killing process with pid: 15302
about to fork child process, waiting until server is ready for connections.
forked process: 15430
child process started successfully, parent exiting
[root@xuegod63 init.d]# ps -efl |grep mongod |grep -v grep
1 S root 15525 1 2 80 0 - 80141 poll_s 19:47 ? 00:00:01 /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
[root@xuegod63 init.d]# netstat -tunlp |grep mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 15724/mongod
方法二、将启动进程添加到/etc/rc.local中
[root@xuegod63 ~]# echo "/usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --fork" >> /etc/rc.local
[root@xuegod63 ~]# service mongod stop
killing process with pid: 16781
[root@xuegod63 ~]# ps -efl |grep mongod |grep -v grep
[root@xuegod63 ~]# /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --fork
about to fork child process, waiting until server is ready for connections.
forked process: 16897
child process started successfully, parent exiting
//不需要密码的登录方式
[root@xuegod63 ~]# /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port=27017 --fork --auth
//需要权限的登录方式, 用户连接需要用户名和密码
[root@xuegod63 ~]# ps -efl |grep mongod |grep -v grep
1 S root 16897 1 2 80 0 - 98274 poll_s 20:26 ? 00:00:00 /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --logpath=/usr/local/mongodb/logs/mongodb.log --logappend --port 27017 --fork
[root@xuegod63 ~]# netstat -tunlp |grep mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 16897/mongod
九、设置防火墙方便局域网内的其它服务器访问
[root@xuegod63 ~]# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
[root@xuegod63 ~]# /etc/init.d/iptables save
[root@xuegod63 ~]# /etc/init.d/iptables restart
十、连接测试
[root@xuegod63 ~]# mongo
MongoDB shell version: 3.2.4
connecting to: test
Server has startup warnings:
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten]
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten]
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten]
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2016-03-30T05:09:28.032+0800 I CONTROL [initandlisten]
>
#查看当前数据库
> db
test
#切到数据库 mydb
> use mydb
switched to db mydb
> db
mydb
#用javascript创建两个文档
> j = { name : "mongo" }
{ "name" : "mongo" }
> k = { x : 3 }
{ "x" : 3 }
#创建mydb数据库和testdata collection
> db.testdata.insert(j)
WriteResult({ "nInserted" : 1 })
> db.testdata.insert(k);
WriteResult({ "nInserted" : 1 })
> show collections
system.indexes
testdata
> db.testdata.find()
{ "_id" : ObjectId("54ddd717d692cfe0bd20d983"), "name" : "mongo" }
{ "_id" : ObjectId("54ddd728d692cfe0bd20d984"), "x" : 3 }
> show dbs
admin (empty)
local 0.078GB
mydb 0.078GB
> use hahadb
switched to db hahadb
> show dbs
admin (empty)
local 0.078GB
mydb 0.078GB
> db
hahadb
> j = { name : "mongo" }
{ "name" : "mongo" }
> show dbs
admin (empty)
local 0.078GB
mydb 0.078GB
> db.testdata.insert(j)
WriteResult({ "nInserted" : 1 })
> show dbs
admin (empty)
hahadb 0.078GB
local 0.078GB
mydb 0.078GB
> use mydb
switched to db mydb
> show collections
system.indexes
testdata
> db.testdata.insert(j)
WriteResult({ "nInserted" : 1 })
> db.testdata.find()
{ "_id" : ObjectId("54ddd717d692cfe0bd20d983"), "name" : "mongo" }
{ "_id" : ObjectId("54ddd728d692cfe0bd20d984"), "x" : 3 }
{ "_id" : ObjectId("54ddda64d692cfe0bd20d986"), "name" : "mongo" }
> db.testdata.insert(k)
WriteResult({ "nInserted" : 1 })
> db.testdata.find()
{ "_id" : ObjectId("54ddd717d692cfe0bd20d983"), "name" : "mongo" }
{ "_id" : ObjectId("54ddd728d692cfe0bd20d984"), "x" : 3 }
{ "_id" : ObjectId("54ddda64d692cfe0bd20d986"), "name" : "mongo" }
{ "_id" : ObjectId("54ddda7dd692cfe0bd20d987"), "x" : 3 }
> db.testdata.find({x:3})
{ "_id" : ObjectId("54ddd728d692cfe0bd20d984"), "x" : 3 }
{ "_id" : ObjectId("54ddda7dd692cfe0bd20d987"), "x" : 3 }
> exit;
[root@xuegod63 ~]#
参考:
docs.mongodb.org/manual/tutorial/install-mongodb-on-linux/
十一、图形化管理(类似phpmyadmin)
http://code.google.com/p/rock-php/wiki/rock_mongo_zh
下载解压修改config.php为对应的地址及端口,使用admin:admin访问即可。
十二、备份及恢复现有数据库(数据库名为blog备份到/backup目录下)
[root@xuegod63 ~]# /usr/local/mongodb/bin/mongodump -h 127.0.0.1 -d blog -o /backup/blog.dmp
[root@xuegod63 ~]# /usr/local/mongodb/bin/mongorestore -h 127.0.0.1 -d blog /backup/ddc.dmp
十三、php mongo扩展安装:
php版本5.2.17编译安装,安装路径/usr/local/php
13.1、下载mongodb扩展源码
源码在http://pecl.php.net/package/mongo下载到
[root@xuegod63 ~]# wget http://pecl.php.net/get/mongo-1.2.2.tgz
[root@xuegod63 ~]# tar -zxvf mongo-1.2.2.tgz
[root@xuegod63 ~]# cd mongo-1.2.2
13.2、执行phpize来准备编译扩展的环境
[root@xuegod63 ~]# /usr/local/php/bin/phpize
运行后执行结果如下:
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
13.3、配置php mongo扩展
[root@xuegod63 ~]# ./configure --with-php-config=/usr/local/php/bin/php-config
--with-php-config这个参数是告诉配置脚本php-config这个程序的路径,php-config的介绍在这里
上面命令在正确配置的环境下运行结果如下:
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
13.4、编译安装扩展
[root@xuegod63 ~]# make && make install
正确编译执行结果如下:
Build complete.
Don't forget to run 'make test'.
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/
13.5、编辑php.ini文件
[root@xuegod63 ~]# vim /usr/local/php/etc/php.ini
extension=mongo.so
一般默认的编译php的ini文件在/usr/local/php/etc/php.ini
13.6、重启服务验证安装结果
测试:
[root@xuegod63 ~]# cd /var/www/html
[root@xuegod63 ~]# vim index.php #编辑输入下面内容
<?php
phpinfo();
?>
:wq! #保存退出
重启服务:
[root@xuegod63 ~]# service httpd restart
or
[root@xuegod63 ~]# service php-fpm restart
在客户端浏览器输入服务器IP地址,如果可以看到mongo相关的配置信息!那么mongodb的扩展就安装成功了。
http://localhost/index.php
看完上述内容,你们掌握RHEL6.7下通用二进制包如何安装MongoDB 3.2.4与mongoDB的php扩展的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!