mongodb入门到应用(一)--安装篇

MongoDB4.2.*的安装

本篇内容简介:【为避免篇幅过长造成不适,故分为三部分:MongoDB安装 + 基本语法和demo + 设计应用和企业实例】

​ 一、MongoDB的安装

​ 1. 单机单节点安装

​ 2. MongoDB集群安装(4.2开始支持事务,但需安装集群,本地以单机多端口为集群案例)

​ 3. MongoDB集群创建db,创建新用户[免密模式下,未开启auth密码验证]

​ 4. MongoDB副本集安装步骤

​ 5. MySQL的数据迁移到MongoDB (通过CSV文件)

一、安装

1. 单机单节点安装
1. 下载地址:
	https://www.mongodb.com/download-center/community
2. 安装命令:
	1) 写配置文件
	vim /usr/local/mongodb/mongodb.conf
		# 端口
        port=27017
        # 数据库路径
        dbpath=/data/mongodb/db
        # 日志文件
        logpath=/data/mongodb/log/mongodb.log
        ## 保留进程ID的文件路径
		pidfilepath=/data/mongodb/mongodb.pid
        # 设置后台运行
        fork=true
        # 日志输出方式
        logappend=true
        #最大同时连接数 默认2000
		maxConns=5000
		#允许所有IP访问,如果要限制访问,可指定以逗号分隔的ip地址
		bind_ip=0.0.0.0
		#是否启用身份认证
		auth=false
	
    	##### [**先注释掉,启动的时候有坑,会导致无法启动] #####
		# 是否支持HTTP形式访问 [**先注释掉,启动的时候有坑,会导致无法启动]
		# nohttpinterface=true
		# rest=false
	
		## 来禁用预分配的数据文件,会缩短启动时间,但在正常操作过程中,可能会导致性能显著下降。
		# noprealloc=true
		##  设置为true,使用较小的默认数据文件大小。smallfiles减少数据文件的初始大小,并限制他们到512M,也减少了日志文件的大小 
		##  并限制他们到128M。如果数据库很大,各持有少量的数据,会导致mongodb创建很多文件,会影响性能。
		# smallfiles=true
		
		##### [**先注释掉,启动的时候有坑,会导致无法启动] #####


	2) /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf 	# 根据指定配置文件,启动mongodb
	
3. 设置守护进程(即开机自启动)
		1) vim /lib/systemd/system/mongodb.service
            写入如下文件内容:
                [Unit]
                Description=mongodb
                After=network.target remote-fs.target nss-lookup.target

                [Service]
                Type=forking
                ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf
                ExecReload=/bin/kill -s HUP $MAINPID
                ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongodb.conf
                PrivateTmp=true

                [Install]
                WantedBy=multi-user.target
                
			并执行 :wq
           2) systemctl list-unit-files | grep mongodb.service	# 查看开机自启动项列表中是否有mongodb
           3) cd /lib/systemd/system && systemctl enable mongodb.service	# 设置mongodb为开机自启动项
           4) systemctl start|stop|restart mongodb.service	# 启动|停止|重启mongodb


4. mongo 和 mongod 文件的区别:
     /usr/local/mongodb/bin/mongo	# 是进入命令行模式的入口文件
     /usr/local/mongodb/bin/mongod # 是mongodb的shell命令模式的启动文件
     注: /usr/local/mongodb/ 是我本地的安装目录,需自行修改为安装目录



5. mongodb设置账户密码登录
	1) 创建用户
		A) 创建管理员
			use admin
			db.createUser({user:"adminUser",pwd:"123456",roles: [{role: "userAdminAnyDatabase",db:"admin"}]})	
		B) 创建普通用户
			use foo
			db.createUser({user:"demoUser",pwd:"123456",roles: ["readWrite","dbAdmin","userAdmin"]})	
			
		C) db.system.users.find().pretty()	// 查看已创建的用户
		D) db.system.users.remove({user:"demoUser"})	//删除指定用户
	
	3) 用户名密码登录
		A) vim /usr/local/mongodb/mongodb.conf
			修改以下内容
			auth=true	# mongo命令行登录模式,设置为账户密码登录
		   保存退出,并重启mongodb (systemctl restart mongodb.service)	
		
		B) 账号密码登录 [注意: 用户在哪个数据库创建,就在哪个库登录,如amdinUser在admin库创建,在admin库登录]
			use admin
			db.auth("adminUser","123456")	// 账户密码登录
			
	4) 内建的角色
        数据库用户角色:read、readWrite;
        数据库管理角色:dbAdmin、dbOwner、userAdmin;
        集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
        备份恢复角色:backup、restore;
        所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
        超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
        内部角色:system

        角色说明:
        Read:允许用户读取指定数据库
        readWrite:允许用户读写指定数据库
        dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
        userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
        clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
        readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
        readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
        userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
        dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
        root:只在admin数据库中可用。超级账号,超级权限


2.MongoDB集群安装(4.2开始支持事务,但需安装集群,本地以单机多端口为集群案例)
1)  openssl rand -base64 64 > ./mongod-keyfile		# 随机生成64位(可自己定)长度密码串,写到mongod-keyfile中,并修改权限(在类unix系统上,keyFile文件只能有文件所有者权限,建议600)

2) 配置三个主机配置文件,三个文件端口必须不一致,可区分文件路径和日志路径(自选),以mongod0.conf文件为例:
	A) vim /usr/local/mongodb/mongod0.conf
		粘贴以下文件内容:
		# mongod0.conf
        # for documentation of all options, see:
        #   http://docs.mongodb.org/manual/reference/configuration-options/
        # Where and how to store data.
        storage:
          dbPath: /usr/local/mongodb/mongod0   #此处的数据存储路径目录改一下,以区分
          #dbPath: /usr/local/mongodb/mongod1   #此处的数据存储路径目录改一下,以区分
          #dbPath: /usr/local/mongodb/mongod2   #此处的数据存储路径目录改一下,以区分
          journal:
            enabled: true
        #  engine:
        #  mmapv1:
        #  wiredTiger:

        # where to write logging data.
        systemLog:
          destination: file
          logAppend: true
          path: /data/mongodb/log/mongod0.log #此处的日志文件路径改一下,以区分
          #path: /data/mongodb/log/mongod1.log #此处的日志文件路径改一下,以区分
          #path: /data/mongodb/log/mongod2.log #此处的日志文件路径改一下,以区分

        # network interfaces
        net:
          port: 27017                           #因在同一主机上,需要一个不同的端口,默认27017
          #port: 27018                           #因在同一主机上,需要一个不同的端口,27018(可能用于GUI图形工具端口,自行修改)
          #port: 27019                           #因在同一主机上,需要一个不同的端口,27019
          bindIp: 0.0.0.0

        # how the process runs
        processManagement:
          timeZoneInfo: /usr/share/zoneinfo

        security:
          authorization: enabled
          #clusterAuthMode: keyFile
          keyFile: /usr/local/mongodb/mongod-keyfile

        #operationProfiling:

        replication:
          replSetName: rs1
        #sharding:
        ## Enterprise-Only Options:
        #auditLog:
        #snmp:

		保存并退出
	2) cp /usr/local/mongodb/mongod0.conf /usr/local/mongodb/mongod1.conf && cp /usr/local/mongodb/mongod0.conf /usr/local/mongodb/mongod2.conf		# 将配置文件复制两份,更换端口,日志路径,数据保存路径
	
	3) 配置mongodb集群的开机自启动
		A) vim /lib/systemd/system/mongodbCluster.service
		粘贴以下内容:
			[Unit]
            Description=mongodbCluster
            After=network.target remote-fs.target nss-lookup.target

            [Service]
            Type=forking
            ExecStart=/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod0.conf  && /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod1.conf   &&   /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongod2.conf
            ExecReload=/bin/kill -s HUP $MAINPID
            ExecStop=/usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod0.conf  &&  /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod1.conf  &&  /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongod2.conf
            PrivateTmp=true

            [Install]
            WantedBy=multi-user.target
            
            保存并退出
       B) systemctl enable mongodbCluster.service	# 设置开机自启动
       C) systemctl start|stop|restart|status mongodbCluster.service	# 启动|停止|重启|查看状态
	
		
		




3.MongoDB集群创建db,创建新用户[免密模式下,未开启auth密码验证]
***注意: mongoDB的连接必须指定数据库,默认连接admin库

1.mongodb集群创建新用户,创建新db
   1) mongo "127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019";	// 格式:mongo "host1,host2,host3,..."; // host一般为域名,或 ip:port
   2) use admin;
   3) db.auth("user","pwd");	// 登录管理员账号
   4) db.createUser({user: "username",pwd: "pwd",roles: [ { role: "readWrite", db: "db_test" } ]} );						// 创建新数据库的新用户,db_test是新创的db名,mongodb的用户是和db绑定的
   5) use admin;
   6) db.auth("newUser","newPwd");		// 登录新创建的账号密码
   7) use db_test;						// 切换到新的db
   8) db.test.insert({"name":"testDemoData"});	// 新建测试集合,因为新db是空的
   9) show tables;						// 查看db_test库下的集合列表,同 show collections;


2. 创建admin数据库的管理员和普通用户
    db.createUser({user:"root",pwd:"funplus12365",roles: [{role: "userAdminAnyDatabase",db:"db_isr"}]})	// 管理员,指定数据库
    db.createUser({user:"toDbUser",pwd:"funplus12365",roles: ["readWrite","dbAdmin","userAdmin"]})	// 普通用户


3. 创建新的数据库db,并创建新数据库db的管理员 
	mongo 127.0.0.1:27017,127.0.0.2:27017,127.0.0.3:27017/admin -u admin -p 123456	// 切换admin库,并登陆;
	use db_test;	// 切换到你所需要创建的数据库下面
	db.createUser({user:"testAdmin",pwd:"123456",roles: [{role:"dbOwner",db:"db_test"}]});// 创建数据库db_test的管理员testAdmin,并设置密码,和权限
	
	// 重启mongodb集群服务***(切记)
	systemctl restart /lib/systemd/system/configure.service
	systemctl restart /lib/systemd/system/shard01.service
	systemctl restart /lib/systemd/system/shard02.service
	systemctl restart /lib/systemd/system/shard03.service
	systemctl restart /lib/systemd/system/mongos.service

	// 登陆新的数据库(testAdmin)
	mongo 127.0.0.1:27017,127.0.0.2:27017,127.0.0.3:27017/db_test -u testAdmin -p 123456	// 切换db_test库,并登陆;

 4. *****注意: 
 	1) mongo 命令行模式下,每个会话session,只允许登录一次(即需要切换账号密码时,需要先退出mongo,重新进入mongo命令行界面)
 	
 	
 	
4.MongoDB副本集安装步骤【集群模式:一主一从一仲裁 , 建议采用1主2从(容灾效果更好)】

	A) 配置文件master.conf
        #master.conf
        dbpath=/data/mongodb/mongoShardMode2/data/master
        logpath=/data/mongodb/mongoShardMode2/log/master.log
        pidfilepath=/data/mongodb/mongoShardMode2/master.pid
        directoryperdb=true
        logappend=true
        replSet=testrs
        bind_ip=0.0.0.0
        port=27017
        oplogSize=10000
        fork=true
        #noprealloc=true

   B) 配置文件master.conf
        #slaver.conf
        dbpath=/data/mongodb/mongoShardMode2/data/slaver
        logpath=/data/mongodb/mongoShardMode2/log/slaver.log
        pidfilepath=/data/mongodb/mongoShardMode2/slaver.pid
        directoryperdb=true
        logappend=true
        replSet=testrs
        bind_ip=0.0.0.0
        port=27018
        oplogSize=10000
        fork=true
        #noprealloc=true

	C) 配置文件arbiter
        #arbiter.conf
        dbpath=/data/mongodb/mongoShardMode2/data/arbiter
        logpath=/data/mongodb/mongoShardMode2/log/arbiter.log
        pidfilepath=/data/mongodb/mongoShardMode2/arbiter.pid
        directoryperdb=true
        logappend=true
        replSet=testrs
        bind_ip=0.0.0.0
        port=27019
        oplogSize=10000
        fork=true
        #noprealloc=true

    启动命令
    /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/master.conf  &&  /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/slaver.conf  &&  /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongoShardConf2/arbiter.conf

    关闭命令
    /usr/local/mongodb/bin/mongod --shutdown --config /usr/local/mongodb/mongoShardConf2/master.conf  &&  /usr/local/mongodb/bin/mongod  --shutdown --config /usr/local/mongodb/mongoShardConf2/slaver.conf  &&  /usr/local/mongodb/bin/mongod  --shutdown --config /usr/local/mongodb/mongoShardConf2/arbiter.conf
    
    
    // dev环境下非root用户,sudo
    sudo /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/master.conf  && sudo  /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/slaver.conf  &&  sudo /opt/mongodb-linux-x86_64-rhel70-4.2.2/bin/mongod --config /opt/mongodb-linux-x86_64-rhel70-4.2.2/replicaSetConf/arbiter.conf

    
    

5. MySQL的数据迁移到MongoDB (通过CSV文件)
1) 将数据导入mongodb
	/usr/local/mongodb/bin/mongoimport --db 目标数据库 --collection 目标数据集合 --type csv --headerline --ignoreBlanks --file 数据源文件	# 将数据源文件(csv格式)导入到目标数据库的目标集合中
	实例:
	/usr/local/mongodb/bin/mongoimport --db db_isr --collection tb_isr_visitors --type csv --headerline --ignoreBlanks --file /root/csv/tb_isr_records_1.csv 	# 将csv文件导入mongodb的db_isr.db_isr_visitors集合中




三、MongoDB和Mysql 的名词映射

RDBMS(关键字/解释) MongoDB(关键字/解释)
数据库(database) 数据库(database)
表格(table) 集合(collection)
行(row) 文档(document)
列(column) 字段(field)
表联合(table joins) 嵌入文档()
索引(index) 索引(index)
主键 主键(MongoDB提供了key为 _id)
Mysqld(服务端入口文件) mongod(服务端入口文件)
2.MongoDB数据库中几项 dbname.system.* 命令的基本含义
集合命名空间 描述
dbname.system.namespaces 命名空间列表
dbname.system.indexs 索引列表
dbname.system.profile 包含数据库概要信息
dbname.system.users 可访问数据库的用户列表
dbname.local.sources 包含复制对端(slave)的服务器信息和状态

***【为避免篇幅过长造成不适,故分为三部分:

1) MongoDB安装 [本篇]
2) MongoDB基本语法和demo
3) 设计应用和企业实例
如有异议,欢迎交流讨论

你可能感兴趣的:(实践类,数据库,mongodb,nosql,golang,经验分享)