jfgdf 发表于 2017-3-13 14:25:18

MongoDB -- 介绍、安装、库管理、备份以及恢复

文档型数据库
C++语言编写,分布式文件存储的开源数据库系统,属于NoSQL
在高负载的情况下,可以添加更多的节点,保证服务器的性能
为WEB应用提供可扩展的高性能数据存储解决方案。
将数据存储为一个文档,数据结构由键值对组成,MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组以及文档数组。
从3.2开始默认使用WiredTiger storage engine.
                  NoSQL MongoDB安装

1
2
3
4
5
6
7
8
9
10
11
vim /etc/yum.repos.d/mongodb-org-3.4.repo

name=MongoDB Repository
baseurl=
gpgcheck=1
enabled=1
gpgkey=


yum install -y mongodb-org
#sed -i "s%bindIp: 127.0.0.1%#bindIp: 127.0.0.1%g" /etc/mongod.conf监听所有的IP,监听多个192.168.1.1,192.168.1.2 使用逗号隔开







卸载

1
2
3
yum erase $(rpm -qa | grep mongodb-org)
rm -r /var/log/mongodb
rm -r /var/lib/mongo






进入mongo shell时 提示


关于读写的认证部分(第一个警告),warning 暂时未解决,按照官方文档操作亦有此问题。
修改内核

1
2
3
4
5
6
echo never >/sys/kernel/mm/transparent_hugepage/enabled
echo never >/sys/kernel/mm/transparent_hugepage/defrag


systemctl start mongod.service
chkconfig mongod on   设置开机启动




无法启动时 可以使用 mongodb -f /etc/mongodb.conf 来启动 ,可以查看错误

Mongodb 连接和用户管理mongo 进入到mongodb shell中 (--port 指定端口默认的端口27017)
连接远程主机mongo --host127.0.0.1
mongo -uusername    -ppasswd
用户管理(针对库),建立用户时要先进入到对应的库里
use test   (切换库,没有自动创建)
db   //显示所在的数据库
db.createUser({user:"admin",pwd:"123456",roles:[{role:'dbOwner',db:'userdb'}]})
use admin
db.system.users.find()   //必须在admin库里 才能找到所有用户,列出所有用户,需要切换到admin库
show users;//查看当前库的所有用户
db.dropUser('admin')//删除用户
MongoDB库管理db.version()//查看版本号
use test   (切换库,没有自动创建)
show dbs   //查看库,此时userdb并没有出现,这是因为该库是空的,还没有任何集合,只需要创建一个集合就能看到了
db.createCollection('clo1')//创建集合clo1,在当前库下面创建
db.dropDatabase()       //删除当前库,必须切换到库下再删除
db.stats()   //查看当前库信息
db.serverStatus()
db.createCollection('clo1',{capped:true,autoIndexID:true,size:6142800,max:10000})
capped:true   启用封顶集合,固定大小的集合,到达最大值时,自动覆盖最早的条目。如果为true,需要指定尺寸大小。
,autoIndexID:true 自动创建索引 _id字段的默认是false
size 指定最大字节的封顶集合,单位 B
max指定封顶集合允许在文件的最大数量。
show collections//查看所有集合   可以用 show tables
db.clo1.insert({clo1ID:1,UserName:"123",password:"123456"})   //如果集合不存在,自动创建集合
db.Account.find()   //查看Account的所有文档
db.Account.find({AccountID:2})   //查看AccountID的内容
db.clo1.update({clo1ID:1},{"$set":{"Age":20}})
db.clo1.remove({clo1ID:1})    //根据条件删除
db.clo1.drop()   //删除所有文档,即删除组合
db.printCollectionStats()   //查看集合状态

MongoDB副本集(repl set)副本集,这种模式下有一个主(primary),多个从(secondary),只读。支持给他们设置权重,当主宕掉后,权重最高的从切换为主(备用的权重需要比其他的高)。此架构中,可以建立一个仲裁的角色,只负责裁决,而不存储数据(也是一个Mongodb的数据库),读写数据都在主上,要实现负载均衡的目标需要手动指定读库目标server。
修改配置文件   /etc/mongod.conf
replication:
test01
mongod
use admin
>config={_id:"test01",members:[{_id:0,host:"192.168.1.88:27017"},{_id:1,host:"192.168.1.89:27017"},{_id:2,host:"192.168.1.90:27017"}]}
>    rs.initiate(config)   //查看状态rs.status() 可能不需要执行下面步骤
>    rs.add("192.168.1.89")
>    rs.add("192.168.1.90")
>   rs.status() 查看状态
如果两个从上的状态 为“stateStr”:"STARTUP",则需要如下操作:
> var config={_id:"test01",members:[{_id:0,host:"192.168.1.88:27017"},{_id:1,host:"192.168.1.89:27017"},{_id:2,host:"192.168.1.90:27017"}]}
> rs.reconfig(config)
再次查看rs.status()状态       SECONDARY
权重设置:默认三台权重都是1,如果任何一台的权重设置比其他的高,则该机器马上切换为primary角色,所以 88:389:2 90:1
在主上执行
cfg=rs.conf()
cfg.members.priority = 3
cfg.members.priority = 2
cfg.members.priority = 1
rs.reconfig(cfg)                   //89节点会成为候选主节点

MongoDB备份与恢复备份库
mongodump -h ip -d dbname -o dir    //-h 后面跟服务ip-p port-d database 名字 ,不加则备份所有的数据库, -o 备份的目录
备份指定的集合
mongodump -d mydb -c testc -o /tmp/test   //-c 指定集合的名字
导出集合为json文件
mongoexport -d mydb -c testc -o /tmp/testc.json   //-o后面跟的是文件的名字
恢复所有的库
mongorestore --drop /tmp/123         //--drop 删除原库然后在恢复/tmp/123 备份所有库目录的名字
恢复指定的库
mongorestore-d mydb dir/   //-d 要恢复库的名字dir 该库备份时所在的目录
恢复集合
mongorestore-d mydb -c test dir/mydb/testc.bson    //-c需要恢复的集合的名字dir 备份时的路径 需要指定要恢复的bson文件
导入集合
mongoimport -d mydb -c testc --file /tmp/testc.json

jame 发表于 2017-8-23 09:55:16

不错很适合小白学习
页: [1]
查看完整版本: MongoDB -- 介绍、安装、库管理、备份以及恢复