您的位置:首页 > 数据库 > Mongodb

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

2017-03-13 00:12 519 查看
Mongodb 介绍
文档型数据库
C++语言编写,分布式文件存储的开源数据库系统,属于NoSQL
在高负载的情况下,可以添加更多的节点,保证服务器的性能
为WEB应用提供可扩展的高性能数据存储解决方案。
将数据存储为一个文档,数据结构由键值对组成,MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组以及文档数组。
从3.2开始默认使用WiredTiger storage engine.
NoSQL MongoDB安装
vim /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
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 使用逗号隔开


卸载
yum erase $(rpm -qa | grep mongodb-org)
rm -r /var/log/mongodb
rm -r /var/lib/mongo


进入mongo shell时 提示




关于读写的认证部分(第一个警告),warning 暂时未解决,按照官方文档操作亦有此问题。
修改内核
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 --host 127.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:3 89:2 90:1
在主上执行
cfg=rs.conf()
cfg.members[0].priority = 3
cfg.members[1].priority = 2
cfg.members[2].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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DB mongo