数据库
首页 > 数据库> > mongodb安装

mongodb安装

作者:互联网

一、安装
1.制作yum文件

# vim /etc/yum.repos.d/mongodb.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc 

2.yum 安装

# yum makecache && yum install -y mongodb-org

3.启动

# systemctl restart mongod
# systemctl enable mongod

4.连接,使用mongo即可连接到数据库,但是会有警告,提示我们禁用大内存页面,解决方法如下
(1)方法一:临时解决,机器重启失效

# echo never >>  /sys/kernel/mm/transparent_hugepage/enabled
# echo never >>  /sys/kernel/mm/transparent_hugepage/defrag

(2)方法二:永久解决

step1 编辑 /etc/default/grub,在GRUB_CMDLINE_LINUX加入选项 transparent_hugepage=never
# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet transparent_hugepage=never"
GRUB_DISABLE_RECOVERY="true"

step2 重新生成grub配置文件
# grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

step3 重启你的系统
# reboot

二、用户管理
1.创建用户admin

> use admin					#切换到admin库
switched to db admin		
> db.createUser( { user: "admin", customData: {describtion: "superuser"}, pwd: "admin123", roles:[ {role: "root", db: "admin"}]})
> db.system.users.find()	#列出所有用户,需要切换到admin库下
> show users;				#查看当前库下所有用户
> db.createUser({user:"test", pwd: "test123", roles:[{role: 'read', db: "admin"}]})
> db.dropUser('test')		#删除用户

2.添加完用户之后需要重启mongo,在重启前在启动文件/usr/lib/systemd/system/mongod.service 中OPTIONS= 后面添加 --auth

# cat /usr/lib/systemd/system/mongod.service
Environment="OPTIONS=-f /etc/mongod.conf --auth"
# systemctl daemon-reload
# systemctl restart mongod
# mongo --host 127.0.0.1 --port  27017 -u admin -p 'admin123' --authenticationDatabase "admin"	 #连接数据库

三、创建集合

> use db3		#创建数据库
> db.createCollection("mycol", {capped: true, autoIndexId:true, size:6142800, max:10000})	#创建集合
# 解释:
# capped true/false(可选)如果为true则启用封顶集合。封顶集合时固定集合的大小,当他达到其最大大小时会自动覆盖最早的条目,如果您指定为true需要指定尺寸参数
# autoIndexId true/false(可选)如果为true,自动创建索引_id字段的默认值为false
# size:指定最大大小字节封顶集合。如果封顶为true,还需要指定这个字段。单位为B
# max:指定封顶集合允许在文件的最大数量
> show collections;		#查看集合
> db.Account.insert({AccountID:2, username:"zhangsan", password:"zhangsan123"})		#如果集合不存在,则会创建集合并插入数据,此时Account 集合不存在则会创建
> db.Account.insert({AccountID:1, username:"xiaoming", password:"xiaoming123"})
> db.Account.update({AccountID:1}, {"$set":{"Age":20}})		#当AccountID=1时,再添加一个字段Age并且Age=20

> db.Account.find()		#查看数据
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }
{ "_id" : ObjectId("5caca05df40482b03949a35c"), "AccountID" : 1, "username" : "xiaoming", "password" : "xiaoming123", "Age" : 20 }
> db.Account.find({AccountID:2})	#根据条件查找
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }

> db.Account.find({AccountID:1})		#根据条件删除
> db.Account.find()
{ "_id" : ObjectId("5cac9febf40482b03949a35b"), "AccountID" : 2, "username" : "zhangsan", "password" : "zhangsan123" }
> db.Account.drop()						#删除所有文档,即删除集合
true
> show tables;							#查看集合
mycol
> db.mycol.insert({'id': 1, 'name': 'z3', pwd:'z3123'})
WriteResult({ "nInserted" : 1 })
> db.mycol.find()
{ "_id" : ObjectId("5caca2f8f62fd0e0effa3a27"), "id" : 1, "name" : "z3", "pwd" : "z3123" }
> db.printCollectionStats()				#查看集合状态

三、副本集
1.ip分配: 192.168.19.101 192.168.19.102 1982.168.19.103
2.修改配置文件/etc/mongod,监听本机ip 以及配置replication

# cat /etc/mongod.conf |grep -A 2 'net:'
net:
  port: 27017
  bindIp: 127.0.0.1,192.168.19.101  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

# cat /etc/mongod.conf |grep -A 2 'repli'
replication:
  oplogSizeMB: 20		#oplog 文件大小,可以不用配置
  replSetName: sxg		#副本集名称

3.在其中一台机器进行配置,则这台机器会会变成主

> use admin
> config={_id:"sxg", members:[{_id:101, host:"192.168.19.101:27017"},{_id:102, host:"192.168.19.102:27017"},{_id:103, host:"192.168.19.103:27017"}]}
> rs.initiate(config)		#配置后等一会会发现当前机器的状态变为PRIMARY
sxg:PRIMARY> rs.status()		

四、测试副本集
1.在从节点上是没有查看等操作的, 若想操作执行命令 rs.slaveOk()即可

sxg:SECONDARY> show dbs
2019-04-10T21:49:50.226+0800 E QUERY    [js] Error: listDatabases failed:{
	"operationTime" : Timestamp(1554904188, 1),
	"ok" : 0,
	"errmsg" : "not master and slaveOk=false",
	"code" : 13435,
	"codeName" : "NotMasterNoSlaveOk",
	"$clusterTime" : {
		"clusterTime" : Timestamp(1554904188, 1),
		"signature" : {
			"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
			"keyId" : NumberLong(0)
		}
	}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:139:1
shellHelper.show@src/mongo/shell/utils.js:882:13
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1


sxg:SECONDARY> rs.slaveOk()
sxg:SECONDARY> show dbs
admin   0.000GB
config  0.000GB
db1     0.000GB
db2     0.000GB
db3     0.000GB
local   0.000GB

2.修改权重:若主节点(192.168.19.101)宕机了,则会从19.102 或19.103中选择一个作为主节点,当再次启动19.101时,主从关系并不会改变

sxg:PRIMARY> rs.config()		#查看权重 发现个节点的priority 均为1


#修改权重,将主节点重启,然后在新的主节点上操作
sxg:PRIMARY> cfg=rs.config()
sxg:PRIMARY> cfg.members[0].priority=3
sxg:PRIMARY> cfg.members[1].priority=2
sxg:PRIMARY> cfg.members[2].priority=1
#等一会后,发现主节点会变到权重最大的那个节点

标签:安装,sxg,admin,mongodb,db,true,id,AccountID
来源: https://blog.csdn.net/sun_xuegang/article/details/89163887