MongoDB部署

打印 上一主题 下一主题

主题 1025|帖子 1025|积分 3075

MongoDB部署

一、MongoDB安装配置

1. 下载安装包

  1. # https://www.mongodb
  2. .com/try/download/community
  3. wget https://fastdl.mongodb
  4. .org/linux/mongodb
  5. -linux-x86_64-rhel70-7.0.14.tgz
复制代码
2. 解压

  1. tar fx mongodb
  2. -linux-x86_64-rhel70-7.0.14.tgz -C /usr/local/
复制代码
3. 创建软链接

  1. ln -s /usr/local/mongodb
  2. -linux-x86_64-rhel70-7.0.14/ /usr/local/mongodb
复制代码
4. 创建数据和日志目录

  1. mkdir /usr/local/mongodb
  2. /{data,logs}
  3. touch /usr/local/mongodb
  4. /logs/mongodb
  5. .log
复制代码
5. 设置环境变量

  1. vim /etc/profile
  2. export MONGODB_HOME=/usr/local/mongodb
  3. export PATH=$MONGODB_HOME/bin:$PATH
复制代码
6. 见效环境变量

  1. source /etc/profile
复制代码
7. 修改配置文件

  1. vim /etc/mongodb
  2. .conf
  3. #指定数据库路径
  4. db
  5. path=/usr/local/mongodb
  6. /data
  7. #指定MongoDB日志文件
  8. logpath=/usr/local/mongodb
  9. /logs/mongodb
  10. .log
  11. # 使用追加的方式写日志
  12. logappend=true
  13. #端口号
  14. port=27017
  15. #方便外网访问
  16. bind_ip=0.0.0.0
  17. fork=true # 以守护进程的方式运行MongoDB,创建服务器进程
  18. #auth=true #启用用户验证
  19. #bind_ip=0.0.0.0 #绑定服务IP,若绑定127.0.0.1,则只能本机访问,不指定则默认本地所有IP
  20. #replSet=single #开启oplog日志用于主从复制
复制代码
8. 启动和关闭服务

  1. # 启动
  2. mongod -f /etc/mongodb
  3. .conf
  4. # 关闭
  5. mongod --shutdown -f /etc/mongodb
  6. .conf
复制代码
9. 验证

  1. ps -ef|grep mongodb
  2. netstat -ntlp|grep 27017
复制代码
二、MongoDB Shell安装

1. 下载安装包

  1. # 下载链接:https://www.mongodb
  2. .com/try/download/shell
  3. wget https://downloads.mongodb
  4. .com/compass/mongosh-2.3.2-linux-x64.tgz
复制代码
2. 解压

  1. tar fx mongosh-2.3.2-linux-x64.tgz
复制代码
3 . 修改命令目录

  1. cp mongosh-2.3.2-linux-x64/bin/mongosh /usr/local/bin/
复制代码
4. 登录

  1. # 不需要认证
  2. mongosh
  3. # 需要认证
  4. mongosh mongodb
  5. ://192.168.9.25:27017/admin -u "admin" -p "abc123456"
复制代码
三、常用命令合集

1. 脚色操纵

1)管理员脚色

  1. # 只能创建在admin逻辑库
  2. readAnyDatabase: 只可以把用户创建在admin逻辑库中,允许读取任何逻辑库
  3. readWriteAnyDatabase: 只可以把用户创建在admin逻辑库中,允许读写任何逻辑库
  4. db
  5. AdminAnyDatabase: 只可以把用户创建在admin逻辑库中,允许管理任何逻辑库
  6. userAdminAnyDatabase: 只可以把用户创建在admin逻辑库中,允许管理任何逻辑库用户
  7. clusterAdmin: 只可以把用户创建在admin逻辑库中,允许管理MongoDB集群
  8. root: 只可以把用户创建在admin逻辑库中,超级管理员,拥有最高权限
复制代码
2)普通脚色

  1. # 在指定逻辑库上创建
  2. Read: 允许用户读取指定逻辑库
  3. readWrite: 允许用户读写指定逻辑库
  4. db
  5. Admin: 可以管理指定的逻辑库
  6. userAdmin: 可以管理指定逻辑库的用户
复制代码
3)创建脚色

  1. # 创建管理员
  2. use admin
  3. db
  4. .createUser({user:"admin",pwd:"abc123456",roles:[{role:"root",db
  5. :"admin"}]})
  6. # 创建普通角色
  7. use common
  8. db
  9. .createUser({user:"qyc",pwd:"abc123456",roles:[{role:"db
  10. Admin",db
  11. :"common"},{role:"readWrite",db
  12. :"common"}]})
复制代码
4)查询脚色

  1. # 查询所有
  2. db
  3. .system.users.find().pretty()
  4. show users
  5. # 查询指定角色
  6. db
  7. .getUser('qyc')
  8. db
  9. .runCommand({usersInfo:"qyc"})
复制代码
5) 更新脚色

  1. db
  2. .updateUser('qyc',{'roles':[{'role':'userAdmin','db
  3. ':'common'},{'role':'read','db
  4. ':'common'}]})
复制代码
6) 修改脚色密码

  1. db
  2. .changeUserPassword("qyc", "123456")
复制代码
7) 删除脚色

  1. db
  2. .dropUser('qyc')
复制代码
8) 脚色认证

  1. db
  2. .auth('qyc','123456')
复制代码
2. 数据库操纵

1)查看全部库

  1. show db
  2. s
复制代码
2) 切换库

  1. # 切换到指定库,不存在会自动创建
  2. use common
复制代码
3)查看当前库

  1. db
复制代码
4)删除当前库

  1. db
  2. .dropDatabase()
复制代码
3. 聚集操纵

1)创建聚集

  1. db
  2. .createCollection("student")
复制代码
2)查看聚集

  1. show collections
复制代码
3)重命名聚集

  1. db
  2. .student.renameCollection("stu")
复制代码
4) 查看聚集记录数量

  1. db
  2. .student.count()
复制代码
5) 查看聚集数据空间容量

  1. # db
  2. .student.dataSize()# 查看聚集总大小(字节为单元)db
  3. .student.totalSize()# 查看聚集的统计信息db
  4. .student.stats()
复制代码
6) 删除聚集

  1. db
  2. .student.drop()
复制代码
4. 文档操纵

1)在聚集中插入文档

  1. # 插入单条db
  2. .student.insertOne({name:"Scott",sex:"male",age:25,city:"Beijing"})# 插入多条,save在_id主键存在就更新,不存在就插入db
  3. .student.insert([{name:"Scott3",sex:"male",age:22,city:"Beijing"},{name:"Scott2",sex:"male",age:22,city:"Beijing"}])db
  4. .student.insertMany([{name:"Scott3",sex:"male",age:22,city:"Beijing"},{name:"Scott2",sex:"male",age:22,city:"Beijing"}])db
  5. .student.save([{name:"Scott3",sex:"male",age:22,city:"Beijing"},{name:"Scott2",sex:"male",age:22,city:"Beijing"}])
复制代码
2)更新文档

  1. # 修改一条记录db
  2. .student.update({name:"Scott2"},{$set:{age:26,classno:"2-6"}})# 修改多条记录db
  3. .student.updateMany({name:"Scott3"},{$set:{classno:"2-7"}})# 在age属性上都加2db
  4. .student.updateMany({},{$inc:{age:2}})# 向数组属性添加元素db
  5. .student.update({name:"Scott"},{$push:{role:"班长"}})
复制代码
3)从文档主键ID中提取时间

  1. ObjectId("66dac03ddf68fdd4c95796d4").getTimestamp()
复制代码
4) 删除文档

  1. # 删除文档中的字段,{}代表修改全部db
  2. .student.update({name:"Scott"},{$unset:{classno:"2-6"}})# 删除数组中的某个元素db
  3. .student.update({name:"Scott"},{$pull:{role:"班长"}})# 删除全部文档db
  4. .student.remove({})# 删除指定文档db
  5. .student.remove({name:"Scott2"})
复制代码
5) 简单查询

表达式说明$lt小于$gt大于$lte小于等于$gte大于等于$in包括$nin不包括$ne不等于$all全部匹配$not取反$or或$exists含有字段
  1. # 查询全部文档db
  2. .student.find()# 查询指定文档,并显示指定字段,1为显示,0不显示db
  3. .student.find({name:"Scott3",classno:"2-8"},{name:1,_id:0})db
  4. .student.find({age:{$gte:24}})db
  5. .student.find({name:/^S/})# 查看单条记录db
  6. .student.findOne({name:/3$/})# 文档嵌套查询# {class:{type: 1, data: [1,2,3]}}db
  7. .student.find({data.class.type:1})db
  8. .student.find({data.class.data.1:2})db
  9. .student.find({data.class.data:[1,2,3]})
复制代码
6)分页查询

  1. # 取前十条db
  2. .student.find().limit(10)# 从21条开始取十条db
  3. .student.find().skip(20).limit(10)
复制代码
7) 文档排序

  1. # 数据排序(1代表升序,-1代表降序)db
  2. .student.find().sort({name:1})
复制代码
8) 文档去重

  1. # 返回去重后指定数据,格式为数组db
  2. .student.distinct("name")# 为去重后数据排序,(-1为正序,1为倒序)db
  3. .student.distinct("name").sort(function(){return -1})# 截取数组中指定数据,(0,5)表示截取从第一行到第六行,(5)表示截取第六行到最后一行db
  4. .stuent.distinct("name").slice(0,5)
复制代码
5. 索引操纵

1) 创建索引

  1. # 1升序,-1降序,background代表在空闲时创建db
  2. .student.createIndex({name:1})db
  3. .student.createIndex({name:-1},{background:true,name:"index_name"})
复制代码
2) 创建唯一性索引

  1. db
  2. .student.createIndex({sid:1},{background:true,unique:true})
复制代码
3) 查看索引

  1. db
  2. .student.getIndexes()
复制代码
4) 删除索引

  1. db
  2. .student.dropIndexes()
复制代码
四、备份与恢复

1. 全库备份

  1. mongodump --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -o /data
复制代码
2. 备份逻辑库

  1. # --dumpDbUsersAndRoles参数可以备份隶属于逻辑库的用户
  2. mongodump --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d school -o /data
复制代码
3. 备份聚集数据

  1. # --gzip压缩备份,--oplog使用oplog进行时间点快照
  2. mongodump --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d school -c student -o /data
  3. # 数据导出JSON或CSV格式数据,-f指定输出字段,-q指定查询语句
  4. mongoexport --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d school -c student -f "_id,name,sex,age" -o student.json
复制代码
4. 单库恢复

  1. # --drop表示导入前删除数据库中集合
  2. mongorestore --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin --drop -d school /data/school
复制代码
5. 聚集恢复

  1. # --gzip解压Gzip压缩存档还原,--oplogReplay重放oplog.bson中的操作内容,--oplogLimit与--oplogReplay一起使用时,可以限制重放到指定的时间点
  2. mongorestore --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d school -c student /data/school/student.bson
  3. # 导入json数据
  4. mongoimport --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d school -c student --file student.json
复制代码
6. 增量恢复

  1. # 使用oplog参数全备,需要开启副本集
  2. mongodump --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin --oplog -o /data
  3. # 解析oplog文件,找出全备最后一个时间的数据
  4. bsondump /data/oplog.bson > /data/oplog.json
  5. # 导出增量数据,这里修改为oplog.json最近一行的时间戳
  6. mongodump --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin -d local -c oplog.rs -q '{ts:{$gt:Timestamp(1610789118,416)}}' -o /data/oplog
  7. # 恢复全备
  8. mongorestore --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin --oplogReplay /data
  9. # 复制增量的oplog到备份目录,重命名为oplog.bson,将原来的oplog.bson覆盖
  10. cp oplog.rs.bson /data/oplog.bson
  11. # 将增量的oplog进行恢复,指定要恢复的时间点
  12. mongorestore --host=localhost --port=27017 -u admin -p abc123456 --authenticationDatabase=admin --oplogReplay --oplogLimit "1610789168:1" /data
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

郭卫东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表