目录
我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
个人博客:传送阵
笔者微信:zhanghe15069028807
,非诚勿扰。
# 一、mongodb4.0单实例
1、安装&启动
部署环境:
centos7系统、64位
iptables和selinux关闭
mongodb简介
mongodb是个非关系型数据库,但操作跟关系型数据最类似。
mongodb是面向文档存储的非关系型数据库,基于分布式的文件存储数据库,数据以json(文档)的格式进行存储
mongodb可用来永久存储,也可用来缓存数据
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.
- 第一个警告是访问控制没有开启
- 第二个警告是用root运行,这个也无所谓
- 第三个警告是要求我们关闭最大内存页
- 最后一个警告要要求把最大进程数设置成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自带的三个库不要动