Mongodb 数据库
mongodb 4.0.23 单机部署
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.23.tgz
# tar -zxvf mongodb-linux-x86_64-4.0.23.tgz -C /usr/local/ \\ 二进制包 直接解压即可
# cd /usr/local/
# mv mongodb-linux-x86_64-4.0.23 mongodb
# mkdir -p /usr/local/mongodb/{data,etc,log}
# ln -s /usr/local/mongodb/bin/* /usr/local/bin/ \\ 软连接到 PATH 目录
# mongod -v \\ 可查看到版本
# echo 'mongod -f /usr/local/mongodb/etc/mongodb.conf' >> /etc/rc.d/rc.local
# chmod +x /etc/rc.d/rc.local
# vim ./etc/mongodb.conf \\ 创建配置文件
dbpath=/usr/local/mongodb/data \\ 数据库路径
logpath=/usr/local/mongodb/log/mongodb.log \\ 日志文件路径
logappend=true \\ 表示日志文件末尾追加日志
port=27017 \\ 启用端口号
fork=true \\ 在后台运行
#bind_ip=172.21.34.204,127.0.0.1 \\ 绑定ip 默认只有127.0.0.1 需要外网访问可以开启 可绑定多个ip
# mongod -f ./etc/mongodb.conf \\ 启动
# ss -tnl \\ 27017被监听
# mongo --host=127.0.0.1 --port=27017 \\ 连接 本机 # mongo 即可
> show dbs; \\ 需要添加 管理用户 默认没有任何用户 添加 root用户 权限为root最大权限 管理admin表格
> use admin; \\ 默认使用test库 但是没有显示 因为此库没有任何数据 所有不显示
> db.createUser( {user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
> show users; \\ 查看 当前数据库的 用户
# pkill mongod \\ 关掉 mongod
# vim ./etc/mongodb.conf
auth=true \\ 开启验证 关闭此项不需要验证 第一次需把此项注释掉 配置完用户在开启
# mongod -f /usr/local/mongodb/etc/mongodb.conf \\ 重新启动 设置的密码已经生效 需要使用 密码
# mongo
> use admin \\ 使用 admin 库 如果admin不存在 在 创建admin库
> db.auth('root','123456') \\ 验证
\\ 以下为一些常用命令
> show dbs \\ 查看所有数据库 MongoDB用户权限分配的操作是针对某个库来说的... ... ... ...
> show databases; \\ 查看所有数据库
> show users \\ 显示用户 刚创建的数据库没有任何用户 需要创建用户
> db \\ 查询 当前所在的数据库
> show tables \\ 查询所有 集合 表
> show collections \\ 查询所有 集合 表
> db stats() \\ 查看 当前 数据库的状态
> db.version() \\ 查看 mongodb 版本
> db.dropDatabase() \\ 删除当前正在使用的数据库
> db.system.users.find() \\ 查询所有用户
> db.system.users.remove({user:"root"}) \\ 删除用户 root
创建数据库
> use teo \\ 创建数据库
> db \\ 显示当前使用的数据库
> show dbs \\ 显示所有数据库 然而并没有刚创建的
> db.runoob.insert({"name":"111"}) \\ 需要随便插入一条数据 才能显示数据库
> show dbs
创建用户
> db.createUser( {user: "root",pwd: "123456",roles: [ { role: "root", db: "admin" } ]})
user:用户名
pwd:密码
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;
在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:
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数据库中可用。超级账号,超级权限。
其他的一些命令
> db.collection_name.find() \\ 查所有满足条件数据
> db.collection_name.findOne() \\ 查满足条件的一条数据
> db.collection_name.count() \\ 统计集合下面有多少数量的数据
> db.collection_name.drop() \\ 删除集合
........................................................................................................................
MongoDB 集群
主从复制 Master-Slaver: 是一种主从副本的模式,目前已经不推荐使用。
副本集 Replica Set: 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,
不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
分片 Sharding: 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。
1. mongodb 4.0.23 集群部署 Replica Set模式 副本集
主节点 172.21.34.204 27017
从节点 172.21.34.204 27018
仲裁节点 172.21.34.204 27019 \\ 仲裁节点本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.23.tgz
# tar zxvf mongodb-linux-x86_64-4.0.23.tgz -C /usr/local/ \\ 二进制包 直接解压即可
# cd /usr/local/
# mv mongodb-linux-x86_64-4.0.23 mongodb
# mkdir -p /usr/local/mongodb/{data/{27017,27018,27019},etc,log,run}
# ln -s /usr/local/mongodb/bin/* /usr/local/bin/ \\ 软连接到 PATH 目录
# mongod -v \\ 可查看到版本
# cd /usr/local/mongodb/etc
# vim /usr/local/mongodb/etc/mongodb_27017.conf
dbpath=/usr/local/mongodb/data/27017 \\ 数据库路径
logpath=/usr/local/mongodb/log/mongodb_27017.log \\ 日志文件路径
pidfilepath=/usr/local/mongodb/run/mongodb_27017.pid \\ pid 路径
directoryperdb=true
logappend=true \\ 使用追加的方式写日志
replSet=testrs \\ 设置副本集名称,在各个配置文件中,其值必须相同
bind_ip=127.0.0.1,172.21.34.204 \\ 绑定ip 默认只有127.0.0.1
port=27017 \\ 启用端口号
oplogSize=10000
fork=true \\ 在后台运行
noprealloc=true
#auth=true \\ 开启验证 此2项为注释 在下面有开启验证的时候 在开
#keyFile=/usr/local/mongodb/keyfile \\ key 文件目录 用于验证节点
# cp mongodb_27017.conf mongodb_27018.conf \\ 三台配置 基本一样 复制 稍加修改即可
# cp mongodb_27017.conf mongodb_27019.conf
# sed -i 's/27017/27018/g' mongodb_27018.conf
# sed -i 's/27017/27019/g' mongodb_27019.conf
# mongod -f /usr/local/mongodb/etc/mongodb_27017.conf \\ 启动 主服务器
# mongod -f /usr/local/mongodb/etc/mongodb_27018.conf \\ 启动 从服务器
# mongod -f /usr/local/mongodb/etc/mongodb_27019.conf \\ 启动 仲裁服务器
# ss -tnl
# pkill mongod
# mongo 172.21.34.204:27017 \\ 配置 副本集
testrs:PRIMARY> use admin
testrs:PRIMARY> cfg={ _id:"testrs", members:[ {_id:0,host:'172.21.34.204:27017',priority:2},
testrs:PRIMARY> {_id:1,host:'172.21.34.204:27018',priority:1},
testrs:PRIMARY> {_id:2,host:'172.21.34.204:27019',arbiterOnly:true}] }; \\ 启动 副本集 priority:0 永远不能为主节点
rs.initiate(cfg) \\ 使配置生效 后 会出现 testrs:PRIMARY> cfg为随便启动名字
testrs:SECONDARY> \\ 集群的标志 有此证明集群启动成功
testrs:PRIMARY> rs.conf() \\ 查看副本集的配置信息
testrs:PRIMARY> rs.status() \\ 查看副本集 状态
testrs:PRIMARY> db.printSecondaryReplicationInfo() \\ 查看备份节点的复制信息
# mongo 172.21.34.204:27017 \\ 添加认证 添加了两个用户 root为系统管理员 admin为数据库管理员,管理所有数据库
testrs:PRIMARY> show dbs
testrs:PRIMARY> use admin
testrs:PRIMARY> show collections
testrs:PRIMARY> db.system.users.find()
testrs:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]}) \\ 添加系统管理员 root
testrs:PRIMARY> db.auth('system','123456') \\ 添加管理员用户认证,认证之后才能管理所有数据库 ↓ 添加数据库管理员
testrs:PRIMARY> db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) \\
# mongo 172.21.34.204:27017 -u root -p 123456 --authenticationDatabase admin \\ 可以连接 ↑ 用来管理所有数据库
# mongo 172.21.34.204:27017 -u admin -p 123456 --authenticationDatabase admin \\ 这两条好像没啥大用
# vim /usr/local/mongodb/etc/mongodb_27017.conf \\ 在所有配置文件中开启认证 27018 27019 也需要添加
auth=true
keyFile=/usr/local/mongodb/keyfile
# openssl rand -base64 21 > keyfile \\ 生成秘钥 长度最好是3的倍数 上面为21位 否则可能认证失败
# chmod 600 /usr/local/mongodb/keyfile
# cat /usr/local/mongodb/keyfile
# pkill mongod \\ 重启 服务器 使验证生效
# mongod -f /usr/local/mongodb/etc/mongodb_27017.conf \\ 启动 主服务器
# mongod -f /usr/local/mongodb/etc/mongodb_27018.conf \\ 启动 从服务器
# mongod -f /usr/local/mongodb/etc/mongodb_27019.conf \\ 启动 仲裁服务器
# mongo 172.21.34.204:27017
testrs:PRIMARY> use admin
testrs:PRIMARY> db.auth('root','123456') \\ 验证
testrs:PRIMARY> rs.status()
复制测试
mongo 172.21.34.204:27017 \\ 主库 创建数据
for(var i=0;i<10;i++){db.customer.insert({"name":"user"+i})}
WriteResult({ "nInserted" : 1 })
db.customer.count()
10
mongo 172.21.34.204:27018 \\ 在从库查看已经可以看到数据
rs.secondaryOk()
db.customer.count()
10
故障转移测试
# mongod --shutdown --dbpath /usr/local/mongodb/data/27017 \\ 关闭 主服务器
# mongo 172.21.34.204:27018 \\ 来接 从服务器
testrs:PRIMARY> rs.status() \\ 查看状态 可以看到此节点已经是主节点 PRIMARY
"name" : "172.21.34.204:27017", \\ 可以 看到 27017 已经 挂掉了
"stateStr" : "(not reachable/healthy)",
# mongod -f /usr/local/mongodb/etc/mongodb_27017.conf \\ 启动 27017 主服务器
# mongo 172.21.34.204:27017 \\ 可看到 依然为主服务器
testrs:PRIMARY> rs.status()
2. mongodb 4.0.23 集群部署 分片 Sharding 未配置 可参考 一下网站搭建
https://blog.csdn.net/weixin_40292351/article/details/103476410?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control
https://blog.csdn.net/liver_life/article/details/100562949?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control
关于 mongod 添加 systemctl 启动项
# vim /etc/init.d/mongod \\ 添加 启动项 带改
ulimit -SHn 655350
#!/bin/sh
# chkconfig: - 64 36
# description:mongod
case $1 in
start)
/usr/local/mongodb/bin/mongod --maxConns 20000 --config /usr/local/mongodb/etc/mongodb.conf
;;
stop)
/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.shutdownServer()"
#/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.auth('root', '123456');db.shutdownServer()"
;;
status)
/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.stats()"
#/usr/local/mongodb/bin/mongo 172.21.34.204:27017/admin --eval "db.auth('root', '123456');db.stats()"
;;
esac