部署MongoDB 与基本使用、备份

MongoDB介绍
介于关系数据库和非关系数据库之间的产品
–一款基于分布式文件存储的数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案
– 将数据存储为一个文档(类似与JSON对象),数据结构有键值(key=value)对组成,用硬盘存储数据
–支持丰富的查询表达,可以设置任何属性的索引
–支持副本集,分片
部署MongoDB 与基本使用、备份

表=====》 集合
记录===》 文档

搭建MDB服务
装包
mkdir /usr/local/mongodb
tar -xf mongodb-linux-x86_64-rhel70-3.6.3.tgz
cd mongodb-linux-x86_64-rhel70-3.6.3/
cp -r bin /usr/local/mongodb/
cd /usr/local/mongodb/
mkdir -p etc log data/db

创建配置文件
vim /usr/local/mongodb/etc/mongodb.conf
fork=true //守护进程方式运行
logpath=/usr/local/mongodb/log/mongod.log //指定日志文件目录
logappend=true //追加方式记录日志信息
dbpath=/usr/local/mongodb/data/db //数据库目录
port=27050
bind_ip=192.168.4.50
启动服务
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf
查看进程
ps -C mongod
查看端口
ss -nutlp | grep mongod
停止服务
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown

连接服务
/usr/local/mongodb/bin/mongo
指定服务使用的IP与端口号
port=27050
bind_ip=192.168.4.50
连接服务
/usr/local/mongodb/bin/mongo --host 192.168.4.50 --port 27050
设置别名(vim /root/.bashrc / etc/bashrc)
alias mdbstart=’/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf’
alias mdbstop=’/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/etc/mongodb.conf --shutdown’
mdbstart (启动)
mdbstop (停止)

数据库管理
查看、创建、切换、删除库
show dbs //查看已有的库
db //显示当前所在库
use 库名 //切换库,若不存在则创建库并切换
show tables 或 show collections //查看库下集合
db.dropDatabase() //删除当前所在库

数据库名称规范
–不能是空字符串(“”)
–不得含有‘’ (空格) . $ / \ \0 (空字符)
–应去啊吧不消协
–最多64字节

集合管理命令

1)查看集合
use game
switched to db game

show tables
2)创建集合,集合不存在时,自动创建并添加文档
db.t1.save({name:“tom”,age:21,sex:“boby”})
db.t1.save({name:“tom”,sex:“girl”,school:“tarena”})
WriteResult({ “nInserted” : 1 })
3)删除所有集合
db.t1.drop()

集合命名的规范:
–不能是空字符串“”
–不能含有\0字符(空字符),此字符表示集合的结尾
–不能以“system."开头,这是为系统集合保留的q前缀
–用户创建的集合名字不能能含有保留字

文档管理命令
db.t1.find() 查看集合的所有文档
db.t1.count() 统计集合个数
db.集合.insert({name:“bob”}) 添加集合字段为name
db.t1.findOne() 只显示集合第一条
db.t1.find({name:“bob”}) 查找name 列值是bob 的文档
db.t1.remove({}) 删除集合的所有文档
db.t1.remove({mail : "[email protected]"}) 删除匹配的所有文档

基本数据类型:
1)字符串string ,UTF-8字符串都可以表示为字符串类型的数据

db.t2.save({name:“张三”,性别:“girl”})
WriteResult({ “nInserted” : 1 })
2)布尔值bool,布尔类型有两个值true和flase
db.t2.save({name:“张三”,婚姻:“flase”})
WriteResult({ “nInserted” : 1 }
3)空null ,用于表示控值或者不存在的字段
db.t2.save({name:“张三”,存款:null})
WriteResult({ “nInserted” : 1 })

数值/数组array
数值:
–shell 默认使用64位浮点型数值。{x:3.14}或{x:3}
–NumberInt (4字节整数) {x:NumberInt(3)} //可以赋值为浮点数,默认保存整数部分)----4字节=32位
db.t2.save({i:NumberInt(7.1)})
WriteResult({ “nInserted” : 1 })
默认保存为整数7

db.t2.save({i:NumberInt(71)})
WriteResult({ “nInserted” : 1 })
–NumberLong (8字节整数) {x:NumberLOng(3)} //赋值时必须为整数,否则报错

数组array
–数据列表或数据集可以表示为数组
–{x:[“a”,“b”,“c”]}
db.t2.save({name:“pul”,by:[“a”,“b”,“c”,“d”]})
db.t2.find({name:“pul”});
{ “_id” : ObjectId(“5c21d3000db592f7d150cc5b”), “name” : “pul”, “by” : [ “a”, “b”, “c”, “d” ] }

代码/日期/对象
代码
–查询和文档中可以包含任何javascript代码
–{x:function(){/* 代码 /}}
db.t2.save({name:“张三”,code:function(){/
<??php echo "hello world" ?>*/}})
日期
–日期被存储为自新纪元依赖经过的毫秒数,不含时区
–{x:new Date()}
db.t2.save({x:new Date()})
{ “_id” : ObjectId(“5c21d9b40db592f7d150cc62”), “x” : ISODate(“2018-12-25T07:18:12.091Z”) }

对象 ,在插入文档时,数据库会自动为每一条文档生成一个object id
–对象id是一个12字节的字符除啊,是文档的唯一标识
–{x:ObjectId()}
db.t2.save({stu_id:ObjectId(),name:“bob”,age:19})
db.t2.find({name:“bob”,age:19})
{ “_id” : ObjectId(“5c21db5a0db592f7d150cc64”), “stu_id” : ObjectId(“5c21db5a0db592f7d150cc63”), “name” : “bob”, “age” : 19 }

内嵌/正则表达式
内嵌:
–文档可以嵌套其他文档,被嵌套的文档作为值来处理
db.t2.save({book: {bname:“kkk”,worker:“jjj”,pay:9.9,wer:20} })

正则表达式:
–查询时,使用正则表达式作为限定条件
db.t2.save({x:/^KaTeX parse error: Expected 'EOF', got '}' at position 2: /}̲) db.t2.find({x…/})
{ “_id” : ObjectId(“5c21dd170db592f7d150cc66”), “x” : /^$/ }

数据导入导出
mongoexport
部署MongoDB 与基本使用、备份

部署MongoDB 与基本使用、备份

导出(mongoexport)
文件必须事先存在
cd /usr/local/mongodb/bin/
mkdir /mdb
./mongoexport --host 192.168.4.50 --port 27050 -d game -c t2 --type=csv -f name,age > /mdb/t1.csv
./mongoexport --host 192.168.4.50 --port 27050 -d game -c t2 --type=json > /mdb/t2.json

导入(mongoimport)
格式一:
mongoimport --host Ip --port 端口 -d 库名 -c 集合名 --type=json 目录名/文件名.json
格式二:
mongoimport --host Ip --port 端口 -d 库名 -c 集合名 --type=csv [–headerline] [–drop] 目录名/文件名.csv (–headerline 删除头部。忽略头部 --drop 删除库集合原先数据追加新数据)

/usr/local/mongodb/bin/mongoimport --host 192.168.4.50 --port 27050 -d userdb -c user --type=json /mdb/t2.json (注,导入的库与集合不存在则创建并导入。不能重复导入。因为数据Id 相同)

部署MongoDB 与基本使用、备份

cd /usr/local/mongodb/bin/
./mongoimport --host 192.168.4.50 --port 27050 -d userdb -c t2 --type=csv -f user,old /mdb/t1.csv (会将文件中第一条信息也赋值为 user old)
cat /mdb/t1.csv
name,age
{ “_id” : ObjectId(“5c21eebf274b3bce4677ca95”), “user” : “name”, “old” : “age” }
./mongoimport --host 192.168.4.50 --port 27050 -d userdb -c t3 --type=csv --headerline /mdb/t1.csv (第一条信息不会赋值)
./mongoimport --host 192.168.4.50 --port 27050 -d userdb -c t2 --type=csv --headerline --drop /mdb/t1.csv (不加drop 则是追加数据。反之覆盖原数据)

将/etc/passwd 导入数据
cp /etc/passwd /root/
sed -i ‘s/????,/g’ /root/passwd
sed -i ‘1iname,passwd,uid,gid,comment,homedir,shell’ /root/passwd
./mongoimport --host 192.168.4.50 --port 27050 -d userdb -c t4 --type=csv --headerline /root/passwd
db.t4.find() [一次只能显示20行 按it 可以显示更多]

数据备份
备份数据所有库到当前目录下的dump 目录
mongodump 【–host ip 地址 --port 端口】
备份时指定备份的库和备份目录
mongodump 【–host ip --port 端口】 -d 数据库名 【-c 集合名】 -o 目录 (-c 指定备份。不加即备份库下所有)
mkdir /mbak
/usr/local/mongodb/bin/mongodump --host 192.168.4.50 --port 27050 -d userdb -c t3 -o /mbak (备份userdb 库下 t3 集合)
ls /mbak/userdb
t3.bson t3.metadata.json
/usr/local/mongodb/bin/bsondump /mbak/userdb/t3.bson (查看备份文件内容)
mkdir /mbak2
/usr/local/mongodb/bin/mongodump --host 192.168.4.50 --port 27050 -d userdb -o /mbak2
ls /mbak2/userdb/
t2.bson t3.bson t4.bson user.bson
t2.metadata.json t3.metadata.json t4.metadata.json user.metadata.json

数据恢复
db.t3.drop() (删除t3 集合)
/usr/local/mongodb/bin/mongorestore --host 192.168.4.50 --port 27050 -d userdb -c t3 /mbak/userdb/t3.bson