mongodb单实例(1)

目录

我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
个人博客:传送阵
笔者微信:zhanghe15069028807,非诚勿扰。

# 一、mongodb4.0单实例

1、安装&启动

部署环境:

centos7系统、64位

iptables和selinux关闭

mongodb简介

  1. mongodb是个非关系型数据库,但操作跟关系型数据最类似。

  2. mongodb是面向文档存储的非关系型数据库,基于分布式的文件存储数据库,数据以json(文档)的格式进行存储

  3. mongodb可用来永久存储,也可用来缓存数据

  4. mongodb提供副本集和分片集群功能,操作简单

mongodb的下载链接,直接使用mongodb的二进制文件,免编译安装

https://www.mongodb.com/download-center?jmp=nav#community

https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz

mongodb的二进制解压安装

cd /usr/local/src/

//mongodb下载二进制包
wget 'http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.2.tgz' 

//解压,由于是二进制的,解压即安装
tar -zxvf mongodb-linux-x86_64-4.0.2.tgz    
mv mongodb-linux-x86_64-4.0.2 /usr/local/mongodb

验证安装是否成功

ll -h /usr/local/mongodb/
/usr/local/mongodb/bin/mongod --help
/usr/local/mongodb/bin/mongod --version

monogdb单例配置文件/data/mongodb/27017/mongodb.conf

systemLog:
 destination: file
 logAppend: true
 path: /data/mongodb/27017/mongodb.log
storage:
 dbPath: /data/mongodb/27017/
 journal:
 enabled: true
processManagement:
 fork: true
net:
 port: 27017
 bindIp: 0.0.0.0

安全说明

如果是公网服务器,学习的时候,建议监听在127.0.0.1:2017

启动mongodb服务器

/usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf

mongodb的启动验证

//数据文件查看
ll -h /data/mongodb/27017/ 

//进程查看
ps auxf  

//端口查看
netstat -tulnp|grep mongo 

mongodb的关闭方式

kill 关闭   #不建议,后续介绍正确的关闭方法
kill -9   #突然断电可能会导致mongodb数据的丢失

2、启动优化

mongodb提供一个mongo客户端,类似于mysql提供的客户端命令

/usr/local/mongodb/bin/mongo 127.0.0.1:27017
/usr/local/mongodb/bin/mongo #默认连接到127.0.0.1:27017

mongodb启动优化说明

WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
WARNING: Access control is not enabled for the database.
​     Read and write access to data and configuration is unrestricted.
WARNING: You are running this process as the root user, which is not recommended.
WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
​    We suggest setting it to 'never'
WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.  #最大内存页
​    We suggest setting it to 'never'
WARNING: soft rlimits too low. rlimits set to 3895 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
  1. 第一个警告是访问控制没有开启
  2. 第二个警告是用root运行,这个也无所谓
  3. 第三个警告是要求我们关闭最大内存页
  4. 最后一个警告要要求把最大进程数设置成65535,同时打开的文件夹也要求增加

同时打开的最大进程和最大文件数优化

[root@mongodb ~]# ulimit -a
max user processes              (-u) 7827

//内核进程数限制放开`/etc/security/limits.conf`,需要重新登录终端
* - nofile 65536   #增加打开的最大文件数
* - nproc 65536    #增加打开的最大进程数

[root@mongodb ~]# ulimit -a
max user processes              (-u) 65536
open files                      (-n) 65536

//centos7默认还有进程数限制/etc/security/limits.d/20-nproc.conf
[root@mongodb ~]# vim /etc/security/limits.d/20-nproc.conf
*          soft    nproc     65536
root       soft    nproc     unlimited

mongodb启动参数优化1,禁止内存巨大页

cat /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' >/sys/kernel/mm/transparent_hugepage/enabled
echo 'never' >/sys/kernel/mm/transparent_hugepage/defrag 
把以上两个命令加入`/etc/rc.local`,注意需要有执行权限,然后启动mongodb
chmod +x /etc/rc.d/rc.local #centos7默认rc.local没有执行权限,需要支持执行权限

使用普通用户启动mongodb(可以不做)

useradd mongodb -s /sbin/nologin
chown -R mongodb:mongodb /data/mongodb/ /usr/local/mongodb/
su - mongodb -s /bin/bash
/usr/local/mongodb/bin/mongod -f /data/mongodb/27017/mongodb.conf 

访问控制建议设置ip白名单访问

//可能会用到的辅助命令
[root@mongodb ~]# df -hT
[root@mongodb ~]# ps auxfww | grep redis

3、客户端使用

mongodb的基础概念介绍:

database #数据库

collection #集合,类似于mysql中的表

filed #类似于mysql中字段,比如姓名、性别、年龄

document #每行的记录

mongo客户端的命令自动提示功能:使用tab键

库操作

查询所有的库,默认自带三个库

//show dbs和show databases效果是一样的
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

mongo客户端提供一个正确关闭mongodb服务器的方法

//必须进入管理库才使用shutdown
use admin
db.shutdownServer()

插入操作:库、表、内容

mongodb创建库、创建集合、插入数据(key value的字典方式插入)

//创建一个数据库zhange,无需显示创建
> use zhang
switched to db zhang

//zhang数据库里面没有数据,默认不会显示出来
> show databases  
admin   0.000GB
config  0.000GB
local   0.000GB

//向zhang数据库里面插入collection(表):zhanghe,也无需显示创建
> db.zhanghe.insert({ name:'zhanghe',age:'22'})
WriteResult({ "nInserted" : 1 })

//再查看库会显示出来了
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
zhang   0.000GB

//show tables和show collection查看表
> show tables;
zhang
zhanghe
> show collections
zhang
zhanghe

//在zhanghe这张表里面再插入一行数据
> db.zhanghe.insert({ name:'zhangjia',age:'14'})
WriteResult({ "nInserted" : 1 })

查询操作

查询集合数据,默认有个_id

//进入zhang这个库
> use zhang
switched to db zhang

//查看库里面有几张表
> show tables;
zhang
zhanghe

//查看zhanghe这张表里面的所有内容
> db.zhanghe.find()
{ "_id" : ObjectId("5e168efeec0e7ffc67edf1a3"), "name" : "zhanghe", "age" : "22" }
{ "_id" : ObjectId("5e168ffcec0e7ffc67edf1a4"), "name" : "zhangjia", "age" : "14" }

//条件查询,查询名字为zhanghe的那一行
> db.zhanghe.find({ name:'zhanghe' })
{ "_id" : ObjectId("5e168efeec0e7ffc67edf1a3"), "name" : "zhanghe", "age" : "22" }

//条件查询,查看age为14的那一行
> db.zhanghe.find({ age:'14' })
{ "_id" : ObjectId("5e168ffcec0e7ffc67edf1a4"), "name" : "zhangjia", "age" : "14" }

删除操作

> use zhang
switched to db zhang

//有条件删除:删除名字是zhangjia的行
> db.zhanghe.remove({name:'zhangjia'})
WriteResult({ "nRemoved" : 1 })

//检查,删除成功
> db.zhanghe.find()
{ "_id" : ObjectId("5e168efeec0e7ffc67edf1a3"), "name" : "zhanghe", "age" : "22" }

//删除zhanghe表内所有数据
> db.zhanghe.remove({})

//表的内容删除了,表还有
> show tables;
zhang
zhanghe

//删除 表
> db.zhanghe.drop()
true

更新

更新集合数据

> db.zhanghe.find({})
{ "_id" : ObjectId("5e1693feec0e7ffc67edf1a5"), "name" : "zhanghe", "age" : "22" }
> db.zhanghe.update({'name':'zhanghe'},{$set:{name:'zhanghehe'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.zhanghe.find({})
{ "_id" : ObjectId("5e1693feec0e7ffc67edf1a5"), "name" : "zhanghehe", "age" : "22" }

删除

> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
zhang   0.000GB
> use zhang
switched to db zhang
> db.dropDatabase()
{ "dropped" : "zhang", "ok" : 1 }
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB

mongodb自带的三个库不要动

上一篇:PHP MySQL:将PDF保存到数据库


下一篇:mongodb入门命令-创建表数据(二)