Linux 下mongodb的安装

http://www.linuxidc.com/Linux/2016-05/131701.htm  安装虚拟机

账号:zxy

密码:zxy123456

CentOS 64Vmware Workstation

 

账号:dev 密码:空格

 

 

虚拟机:

 

 

 

 

 

SecureCRT连接虚拟机

 

 

 

 

 

安装JVM

下载

cd /usr/local/src 

wget -c http://download.oracle.com/otn-pub/java/jdk/8u151-b12/e758a0de34e24606bca991d704f6dcbf/jdk-8u151-linux-x64.rpm

安装rpm安装方式jdk默认安装在/usr/java下面)

 

配置环境变量: 

[root@localhost local]# vi /etc/profile 

添加以下代码 

#setup JAVA JDK 

JAVA_HOME=/usr/java/jdk1.8.0_101/ 

JAVA_BIN=/usr/java/jdk1.8.0_101/bin 

JRE_HOME=/usr/java/jdk1.8.0_101/jre 

PATH=$PATH:$JAVA_BIN:$JRE_HOME/bin 

CLASSPATH=./$JAVA_HOME/lib.tools.jar:$JAVA_HOME/lib/dt.jar 

export JAVA_HOME 

export JAVA_BIN 

export JRE_HOME 

export PATH 

exportCLASSPATH

 

保存文件使其生效: 

[root@localhost local]# source /etc/profile

检查是否配置正确: 

[root@localhostlocal]# java -version

java version"1.8.0_151"

Java(TM) SE RuntimeEnvironment (build 1.8.0_151-b12)

Java HotSpot(TM)64-Bit Server VM (build 25.151-b12, mixed mode)

 

安装 导入导出 lrzsz

 

/etc/yum.repos.d

 

 

 

共享目录

cd  /mnt/hgfs

 

 

Centos6.5

   防火墙:iptables

  网卡名称:

 

Centos 7

 防火墙:

 网卡名称:

 

 

安装Centos7  http://www.jb51.net/article/97386.htm

CentOS7 系统目录详解   <http://blog.csdn.net/longxu0872/article/details/71168340>

 

 

账号:root  密码:root

 

查询ip地址   ip addr 

 

yum缺失:

查看当前ens33的配置是否正确(网络管理ifconfig命令配置的网卡信息

更新yum

 

下载插件:

 

 

 

开始操作

 

创建目录

安装jdk

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html/jdk-8u151-linux-x64.rpm

 

配置环境变量

 

#setup JAVA JDK

JAVA_HOME=/usr/java/jdk1.8.0_151

JAVA_BIN=/usr/java/jdk1.8.0_151/bin

JRE_HOME=/usr/java/jdk1.8.0_151/jre

PATH=$PATH:$JAVA_BIN:$JRE_HOME/bin

CLASSPATH=.:/usr/java/jdk1.8.0_151/lib/tools.jar:/usr/java/jdk1.8.0_151/lib/dt.jar

export JAVA_HOME

export JAVA_BIN

export JRE_HOME

export PATH

export CLASSPATH

 

保存文件使其生效

[root@localhost /]#source /etc/profile

 

检查是否正确

 

安装tomcat

sz上传tomcat安装包

 

解压安装包

zip命令
解压:unzip
apache-tomcat-8.5.15
压缩:zip
apache-tomcat-8.5.15.zip apache-tomcat-8.5.15

修改名称为tomcat8088

配置环境变量 vi /etc/profile

是环境变量生效 source/etc/profile

root设置权限  chmod u+x *.sh

 

今天在Linux上启动Tomcat,结果弹出:-bash: ./startup.sh:Permission denied 的提示。

这是因为用户没有权限,而导致无法执行。用命令chmod 修改一下bin目录下的.sh权限就可以了。

chmod u+x *.sh

这里的u 这里指文件所有者,+x 添加可执行权限,*.sh表示所有的sh文件。

 

启动tomcat/root/service/tomcat8088/bin   ./startup.sh

6 向防火墙添加8080端口(centos7以上都是firewall,iptables的升级版)

   查看firewall状态(runing表示在运行,not runing表示没运行,若是没运行用systemctl start firewalld 启动)

[root@iZt4n6h3u4k407nnijel5xZ~]# firewall-cmd --state
running

[root@iZt4n6h3u4k407nnijel5xZ~]#

  添加8080端口

[root@iZt4n6h3u4k407nnijel5xZ~]# firewall-cmd --permanent --zone=public --add-port=8080/tcp
success

[root@iZt4n6h3u4k407nnijel5xZ~]#

 重新加载firewall

[root@iZt4n6h3u4k407nnijel5xZ~]# firewall-cmd --reload
success

[root@iZt4n6h3u4k407nnijel5xZ~]#

7 测试tomcat在服务端是否能访问

[root@iZt4n6h3u4k407nnijel5xZ/]# curl http://localhost:8080

如果控制台输出一堆html代码表示服务端能访问

8 若是用浏览器能正常访问,则表示tomcat没什么问题了。

 

安装mysql

 

 

安装mongodb

下载:

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.9.tgz

解压

 tar zxvf mongodb-linux-x86_64-3.2.9.tgz

 

touch能够新建文件,mkdir用来新建文件夹。rm用来删除文件或文件夹。

 

安装装备:
 

创建数据库文件夹与日志文件、配置文件:

mkdir data 数据库文件夹

touch mongodb.log日志文件

touch mongodb.conf 配置文件

 

 

配置环境变量

 

是环境变量起作用

 

命令行中运行mongodb服务

 ./mongodb/bin/mongod-dbpath=/root/DB/mongodb/data/db -logpath=/root/DB/mongodb/logs/mongodb.logs

/data/db是 MongoDB 默认的启动的数据库路径(--dbpath)。(注意:如果你的数据库目录不是/data/db,可以通过 --dbpath 来指定。)

 

MongoDB后台管理 Shell

 

解决上面警告

2017-12-26T04:53:54.987-0500I CONTROL  [initandlisten] ** WARNING:/sys/kernel/mm/transparent_hugepage/enabled is 'always'.

2017-12-26T04:53:54.987-0500I CONTROL  [initandlisten] **        We suggest setting it to 'never'

2017-12-26T04:53:54.987-0500I CONTROL  [initandlisten]

2017-12-26T04:53:54.987-0500I CONTROL  [initandlisten] ** WARNING:/sys/kernel/mm/transparent_hugepage/defrag is 'always'.

2017-12-26T04:53:54.987-0500I CONTROL  [initandlisten] **        We suggest setting it to 'never'

Centos6开始引入THPCentos7时默认启动,用来提升内存性能。针对一些数据库,如:OrcaleMariaDBMongoDBVoltDB在使用时,要求关闭此功能。

因此:查询是否启用

禁用:编辑rc.local启动文件

[root@localhost~]# vi /etc/rc.d/rc.local
增加下列内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi

保存并退出,然后给rc.local添加可执行权限。

[root@localhost~]# chmod +x /etc/rc.d/rc.local

最后重启。

 

 

 

 

最终目录

 

 

mongodb的启动方式:

1.运行命令方式启动 缺陷:终端离线或者关闭,mongodb就会自动退出

./mongodb/bin/mongod -dbpath=/root/DB/mongodb/data/db-logpath=/root/DB/mongodb/logs/mongodb.logs

改进

2.以系统服务方式启动

3.mongodb配置文件方式启动:

[root@localhostmongodb]# ./mongodb/bin/mongod -f mongodb.conf

配置文件内容:

# mongodb.config

#端口号 默认为27017,注意这里端口修改为9888后,要用mongo--port=9888连接,否则报错。

##port=9888

port=27017

##数据库路径(数据文件)

dbpath=/root/DB/mongodb/data/db

###日志存储位置

logpath=/root/DB/mongodb/logs/mongod.log

###错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件

logappend=true

###启动日志文件,默认启用

journal=true

#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false

quiet=false

#以守护程序的方式启用,即在后台运行

fork = true

 

正常:about to fork child process, waiting until serveris ready for connections.

forked process: 2022

child processstarted successfully, parent exiting

检查接口是否启动:

[root@localhostmongodb]# netstat -lanp | grep "27017"        

tcp        0     0 0.0.0.0:27017          0.0.0.0:*               LISTEN      2022/./mongodb/bin/

unix  2     [ ACC ]     STREAM     LISTENING     20874   2022/./mongodb/bin/ /tmp/mongodb-27017.sock

报错(重复启动的情况)

[root@localhost mongodb]# ./mongodb/bin/mongod -fmongodb.conf

about to fork child process, waiting until server isready for connections.

forked process: 2043

ERROR: child process failed, exited with error number48

解决报错:

[root@localhost db]# rm mongod.lock

[root@localhost mongodb]# ./mongodb/bin/mongod--repair

4.mongodb脚本方式启动:

 

 

停止mongodb:

1.

[root@localhostmongodb]# ./mongodb/bin/mongod -shutdown-dbpath=/root/DB/mongodb/data/db

killing process withpid: 2077

[root@localhostmongodb]# netstat -lanp | grep "27017"

tcp        0     0 127.0.0.1:27017        127.0.0.1:36870         TIME_WAIT   -

 

2正确关闭mongodb进入mongo shell

use admin
db.shutdownServer()

3.粗暴方式:

[root@localhostmongodb]# ps aux|grep mongo                   

root      4051 1.0  3.6 360592 36636 ?        Sl  04:02   0:01 ./mongodb/bin/mongod-f mongodb.conf

root      4080 0.0  0.0 112660   968 pts/0   S+   04:04   0:00 grep --color=auto mongo

[root@localhostmongodb]# kill -9 4051

 

 

 

校验是否启动:

Centos7安装netstatyum installnet-tools

netstat -lanp | grep "27017"

[root@localhostmongodb]# netstat -lanp | grep "27017"        

tcp        0     0 0.0.0.0:27017          0.0.0.0:*               LISTEN      2022/./mongodb/bin/

unix  2     [ ACC ]     STREAM     LISTENING     20874   2022/./mongodb/bin/ /tmp/mongodb-27017.sock

 

上面表示启动成功。使用mongo客户端访问下数据库(mongo shell)

./mongodb/bin/mongo

 

打开防火墙端口:

iptables-A INPUT -p tcp -m tcp--dport 27017 -j ACCEPT

 

mongodb权限管理(添加管理员/普通用户)(http://www.cnblogs.com/hanyinglong/archive/2016/07/25/5704320.html#_label4)

简单介绍:MongoDB是没有默认管理员账号的,所以要添加管理员账号,在开启权限认证;

切换到admin数据库,添加的账号才是管理员账号;

用户只能在用户所在的数据库登录,包括管理员账号;

管理员可以管理所有的数据库,但是不能直接管理其他的数据库,要先在admin数据库中认证才可以,也是为了安全性考虑。

进入mongodbshell界面后:

show dbs:展示所有数据库

use admin:创建一个admin数据库,权限管理就是使用的admin数据库,此命令也是切换数据库的命令

show collections切换到admin库之后,使用show collections查询,我们发现该数据库有system.user(用来存超级管理员)system.version

> showcollections

system.users

system.version

//创建管理员用户kencery

>db.createUser({user:"kencery",pwd:"kencery",customData:{description:"管理员用户"},roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

 

//show usersdb.system.users.find()查询创建的用户

> show users

{

        "_id" :"admin.kencery",

        "user" : "kencery",

        "db" : "admin",

        "customData" : {

                "description" :"管理员用户"

        },

        "roles" : [

                {

                        "role" :"userAdminAnyDatabase",

                        "db" :"admin"

                }

        ]

}

>db.system.users.find()

{ "_id" :"admin.kencery", "user" : "kencery","db" : "admin", "credentials" : {"SCRAM-SHA-1" : { "iterationCount" : 10000,"salt" : "OzEcokjVjOFKjfpZb8JEnA==", "storedKey": "Ed5NOYUiE01dZ1iNLWCBzfCSpDQ=", "serverKey" :"1XMZJTjj4xWPdkE0maAeytg2XCs=" } }, "customData" : {"description" : "管理员用户" }, "roles" : [ { "role": "userAdminAnyDatabase", "db" : "admin" } ] }

//开启用户权限验证,因为MongoDB默认是不开启权限验证的,在配置文件中加入auth=true

[root@localhostmongodb]# vi mongodb.conf

#是否需要验证权限

auth=true

 

关闭mongodb后重新启动

重启之后我们在连接数据库然后切换到admin数据库下,使用db.system.users.find()命令查看,如下图所示,则说明配置已经成功

 

提示信息提示我们没有对其进行授权,此时,我们输入如下命令进行授权,授权之后我们使用查询命令去查询发现已经可以查询,到这里简单权限已经设置完成

 

 

查询结果

>db.system.users.find()

{ "_id" :"admin.kencery", "user" : "kencery","db" : "admin", "credentials" : {"SCRAM-SHA-1" : { "iterationCount" : 10000,"salt" : "OzEcokjVjOFKjfpZb8JEnA==", "storedKey": "Ed5NOYUiE01dZ1iNLWCBzfCSpDQ=", "serverKey" :"1XMZJTjj4xWPdkE0maAeytg2XCs=" } }, "customData" : {"description" : "管理员用户" }, "roles" : [ { "role": "userAdminAnyDatabase", "db" : "admin" } ] }

 

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
具体角色:
read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

 

 

kencery(超级管理员)授权之后,创建读和写的用户账号,在创建root的账号

> db.createUser({

...                   user:"read",                                  

...                   pwd:"read",

...                  roles:[{role:"read",db:"logs"}]

...              })

> db.createUser({

... ...                  user:"readwrite",                                  

... ...                   pwd:"readwrite",

... ...                  roles:[{role:"readWrite",db:"logs"}]

... ...              })

>db.createUser({user:"nouse",pwd:"nouse",customData:{description:"管理员用户"},roles:[{role:"root",db:"admin"}]})

 

admin数据库中查询用户数和用户信息(db.system.users.find().pretty()db.system.users.find().count)

 

 

 

 

mongodb常用命令:

查看数据库命令:show dbs;

查看集合命令:show collections;

切换数据库:use databaseName;

查询数据:db.集合名.find()

插入数据:db.集合名.insert({name:'test',age:1});

删除:db.test.remove();

授权:db.auth("用户名","用户密码")

 

 

 

Robo3T远程连接mongodb:

 

下面报错(是因为加了权限所以会报错)

 

配置文件

 

连接:

 

https://www.cnblogs.com/moxiaoan/p/5683743.html

 

 

 

 

最后剩余用户

admin

 

 

logs数据库

 

runoob数据库

 

test数据库

 

 

基本命令

 

 

show dbs;//查询所有数据库名字    (创建的数据库并不在数据库的列表中,需要先插入数据才能用此命令看到这个信息)

use DATABASE_NAME ;//如果数据库不存在,则创建数据库,否则切换到指定数据库

db; //查询当前数据库名字

show collections/show tables; //查询当前数据库下面的所有集合(数据库)

> show tables

test

> show dbs

admin  0.000GB

local  0.000GB

logs   0.000GB

test   0.000GB

db.COLLECTION_NAME.find(); //查询单个集合信息

db.COLLECTION_NAME.find().pretty();//以格式化的方式查询单个集合信息

db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty();// 'where likes>50AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'

$gt --------greater than  >

$gte ---------gt equal  >=

$lt --------less than  <

$lte ---------lt equal  <=

$ne -----------not equal !=

$eq -------- equal  =

 修改数据库名字:

 

db.COLLECTION_NAME.insert(document); //插入数据信息,同时也是创建单个集合(),document是JSON数据结构,所有存储在集合中的数据都是BSON格式(是一种JSON的二进制形式的存储格式,简称Bnary JSON

 

修改数据信息

替换方式修改(需要原来数据的ID)

db.col.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
   
"description" : "MongoDB 是一个 Nosql数据库",
   
"by" : "Runoob",
   
"url" : "http://www.runoob.com",
   
"tags" : [
           
"mongodb",
           
"NoSQL"
   
],
   
"likes" : 110
})

修改:

只更新第一条记录:

db.col.update( { "count" : { $gt : 1 } } , {$set : { "test2" : "OK"} } );

全部更新:

db.col.update( { "count" : { $gt : 3 } } , {$set : { "test2" : "OK"} },false,true );

只添加第一条:

db.col.update( { "count" : { $gt : 4 } } , {$set : { "test5" : "OK"} },true,false );

全部添加加进去:

db.col.update( { "count" : { $gt : 5 } } , {$set : { "test5" : "OK"} },true,true );

全部更新:

db.col.update( { "count" : { $gt : 15 } } , {$inc : { "count" : 1} },false,true );

只更新第一条记录:

db.col.update( { "count" : { $gt : 10 } } , {$inc : { "count" : 1} },false,false );

db.collection.update(,,{upsert: , multi: , writeConcern: })参数说明

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。

 

db.dropDatabase();  //删除数据库(),在使用之前,先得切换到要删除的库中

db.COLLECTION_NAME.drop(); //删除集合(表)

删除数据信息

>db.col.remove({'title':'MongoDB 教程'})
WriteResult({ "nRemoved" : 2 })           # 删除了两条数据

db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)  //删除第一条找到的记录可以设置 justOne为 1

>db.col.remove({})   //删除所有数据

 

给数据库添加用户权限

1 进入ljc 数据库:      

useljc;             --ljc为数据库名称。

2添加用户(读写权限,readOnly-->false):

 db.addUser("java","java");

3 查看一下所有的用户

db.system.users.find(); //show users

{ "_id" : ObjectId("4e02a89fb841deb5fda3e5e2"),"user" : "java", "readOnly" : fa

lse, "pwd" :"59cf7cc156874cbd35cb00869126f569" }

4用户授权。

db.auth("java","java");   显示为1 表示授权成功,0表示不成功。 

5 添加用户(只读权限,readOnly-->true):

db.addUser("java1","java1",true);

db.system.users.find();

{"_id" : ObjectId("4e02a89fb841deb5fda3e5e2"),"user" : "java", "readOnly" : false, "pwd" :"59cf7cc156874cbd35cb00869126f569" }

{"_id" : ObjectId("4e02aae6b841deb5fda3e5e3"),"user" : "java1", "readOnly" : true, "pwd" :"fca6bda05c87a72cce0a4a6458d1e266" }

 

db.createUser({user:"admin",pwd:"admin",customData:{description:"超级用户角色"},roles:[{role:"root",db:"admin"}]})

db.createUser({user:"zxy01",pwd:"123456",customData:{description:"只读管理员"},roles:[{role:"read",db:"logs,meetings"}]})

db.createUser({user:"zxy02",pwd:"123456",customData:{description:"读管理员"},roles:[{role:"readWrite",db:"logs,meetings"}]})

6更改密码(为已经存在的用户更改密码):

 db.addUser("java","java1"); 

7删除用户:

db.system.users.remove({user:"java1"});

 

你可能感兴趣的:(linux,mongodb)