乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      mongodb應(yīng)用

       Coder編程 2022-04-21

      關(guān)系型與非關(guān)系型

      NoSQL not only sql

      NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫(kù)。
      NoSQL有時(shí)也稱作Not Only SQL的縮寫
      是對(duì)不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱。
      對(duì)NoSQL最普遍的解釋是”非關(guān)聯(lián)型的”,強(qiáng)調(diào)Key-Value Stores和文檔數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),而不是單純的RDBMS。
      NoSQL用于超大規(guī)模數(shù)據(jù)的存儲(chǔ)。
      這些類型的數(shù)據(jù)存儲(chǔ)不需要固定的模式,無需多余操作就可以橫向擴(kuò)展。

      今天我們可以通過第三方平臺(tái)可以很容易的訪問和抓取數(shù)據(jù)。
      用戶的個(gè)人信息,社交網(wǎng)絡(luò),地理位置,用戶生成的數(shù)據(jù)和用戶操作日志已經(jīng)成倍的增加。
      我們?nèi)绻獙?duì)這些用戶數(shù)據(jù)進(jìn)行挖掘,那SQL數(shù)據(jù)庫(kù)已經(jīng)不適合這些應(yīng)用了
      NoSQL數(shù)據(jù)庫(kù)的發(fā)展也卻能很好的處理這些大的數(shù)據(jù)。

      mongo和mysql數(shù)據(jù)對(duì)比

      mysql 	mongo 
      庫(kù)		庫(kù)
      表		集合
      字段	key:value
      行		文檔 
      
      name  		age  job  
      oldzhang 	28   it 
      xiaozhang	28	 it
      xiaofei		18 	 student  SZ 
      
      {name:'oldzhang',age:'28',job:'it'},
      {name:'xiaozhang',age:'28',job:'it'},
      {name:'xiaozhang',age:'28',job:'it',host:'SZ'}
      

      MongoDB特點(diǎn)

      高性能:
      Mongodb提供高性能的數(shù)據(jù)持久性
      尤其是支持嵌入式數(shù)據(jù)模型減少數(shù)據(jù)庫(kù)系統(tǒng)上的I/O操作
      索引支持能快的查詢,并且可以包括來嵌入式文檔和數(shù)組中的鍵

      豐富的語言查詢:
      Mongodb支持豐富的查詢語言來支持讀寫操作(CRUD)以及數(shù)據(jù)匯總,文本搜索和地理空間索引

      高可用性:
      Mongodb的復(fù)制工具,成為副本集,提供自動(dòng)故障轉(zhuǎn)移和數(shù)據(jù)冗余,

      水平可擴(kuò)展性:
      Mongodb提供了可擴(kuò)展性,作為其核心功能的一部分,分片是將數(shù)據(jù)分,在一組計(jì)算機(jī)上。

      支持多種存儲(chǔ)引擎:
      WiredTiger存儲(chǔ)引擎和、MMAPv1存儲(chǔ)引擎和InMemory存儲(chǔ)引擎

      mongo應(yīng)用場(chǎng)景

      游戲場(chǎng)景,使用 MongoDB 存儲(chǔ)游戲用戶信息,用戶的裝備、積分等直接以內(nèi)嵌文檔的形式存儲(chǔ),方便查詢、更新

      物流場(chǎng)景,使用 MongoDB 存儲(chǔ)訂單信息,訂單狀態(tài)在運(yùn)送過程中會(huì)不斷更新,以 MongoDB 內(nèi)嵌數(shù)組的形式來存儲(chǔ),一次查詢就能將訂單所有的變更讀取出來。

      社交場(chǎng)景,使用 MongoDB 存儲(chǔ)存儲(chǔ)用戶信息,以及用戶發(fā)表的朋友圈信息,通過地理位置索引實(shí)現(xiàn)附近的人、地點(diǎn)等功能

      物聯(lián)網(wǎng)場(chǎng)景,使用 MongoDB 存儲(chǔ)所有接入的智能設(shè)備信息,以及設(shè)備匯報(bào)的日志信息,并對(duì)這些信息進(jìn)行多維度的分析

      視頻直播,使用 MongoDB 存儲(chǔ)用戶信息、禮物信息等

      電商場(chǎng)景,使用 MongoDB
      商城上衣和褲子兩種商品,除了有共同屬性,如產(chǎn)地、價(jià)格、材質(zhì)、顏色等外,還有各自有不同的屬性集,如上衣的獨(dú)有屬性是肩寬、胸圍、袖長(zhǎng)等,褲子的獨(dú)有屬性是臀圍、腳口和褲長(zhǎng)等

      安裝mongodb

      1.規(guī)劃目錄
      #軟件所在目錄
      /opt/mongodb 
      
      #單節(jié)點(diǎn)目錄
      /opt/mongo_27017/{conf,log,pid}
      
      #數(shù)據(jù)目錄
      /data/mongo_27017
      
      2.下載依賴并解壓(上傳安裝包)
      yum install libcurl openssl -y
      cd /opt/
      wget https://fastdl./linux/mongodb-linux-x86_64-3.6.13.tgz
      tar zxvf mongodb-linux-x86_64-3.6.13.tgz
      ln -s mongodb-linux-x86_64-3.6.13 mongodb
      
      3.創(chuàng)建文件目錄以及數(shù)據(jù)目錄
      mkdir /opt/mongo_27017/{conf,logs,pid} -p
      mkdir /data/mongo_27017 -p
      

      配置啟動(dòng)mongo

      1.創(chuàng)建配置文件
      cat > /opt/mongo_27017/conf/mongodb.conf  << EOF
      systemLog:
        destination: file   
        logAppend: true  
        path: /opt/mongo_27017/logs/mongodb.log
      
      storage:
        journal:
          enabled: true
        dbPath: /data/mongo_27017
        directoryPerDB: true
        wiredTiger:
           engineConfig:
              cacheSizeGB: 1
              directoryForIndexes: true
           collectionConfig:
              blockCompressor: zlib
           indexConfig:
              prefixCompression: true
      
      processManagement:
        fork: true
        pidFilePath: /opt/mongo_27017/pid/mongod.pid
      
      net:
        port: 27017
        bindIp: 127.0.0.1,10.0.0.51
      EOF
      
      2.啟動(dòng)mongo
      /opt/mongodb/bin/mongod -f /opt/mongo_27017/conf/mongodb.conf
      
      3.檢查是否啟動(dòng)
      ps -ef|grep mongo
      netstat -lntup|grep 27017
      

      配置登錄mongo

      1.寫入環(huán)境變量
      echo 'PATH=$PATH:/opt/mongodb/bin' >> /etc/profile
      source /etc/profile
      
      2.登錄
      mongo db01:27017
      
      3.關(guān)閉
      方法1:
      使用localhost登錄
      mongo localhost:27017
      use admin
      db.shutdownServer()
      
      方法2:
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      

      優(yōu)化告警

      1.訪問控制
      WARNING: Access control is not enabled for the database.
      Read and write access to data and configuration is unrestricted.
      解決方法:
      開啟安全認(rèn)證功能
      #創(chuàng)建管理用戶
      mongo db01:27017
      use admin 
      db.createUser(
      	{
      		user: "admin",
      		pwd: "123456",
      		roles:[ 
      				{ 
      					role: "root", 
      					db:"admin"
      				}
      			  ]
      	}	
      )
      
      #查看創(chuàng)建的用戶
      db.getUsers()
      
      #配置文件添加權(quán)限認(rèn)證參數(shù)/opt/mongo_27017/conf/mongodb.conf
      security:     
        authorization: enabled
      
      #重啟mongo
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      mongod -f /opt/mongo_27017/conf/mongodb.conf
      
      #使用admin用戶登錄
      mongo db01:27017 -uadmin -p --authenticationDatabase admin
      
      2.以root用戶運(yùn)行
      WARNING: You are running this process as the root user, which is not recommended.
      解決步驟:
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      useradd mongo
      echo '123456'|passwd --stdin mongo
      chown -R mongo:mongo /opt/
      chown -R mongo:mongo /data/
      su - mongo
      mongod -f /opt/mongo_27017/conf/mongodb.conf
      mongo
      
      logout #切換用戶
      
      
      3.關(guān)閉大內(nèi)存頁(yè)技術(shù)
      WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
      We suggest setting it to 'never'
      WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
      We suggest setting it to 'never'
      
      解決方法:
      臨時(shí)解決:
      echo "never" >/sys/kernel/mm/transparent_hugepage/enabled
      echo "never" >/sys/kernel/mm/transparent_hugepage/defrag
      寫入開機(jī)自啟動(dòng):
      chmod +x /etc/rc.d/rc.local
      vim /etc/rc.d/rc.local
      echo "never" >/sys/kernel/mm/transparent_hugepage/enabled
      echo "never" >/sys/kernel/mm/transparent_hugepage/defrag
      驗(yàn)證:
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      mongod -f /opt/mongo_27017/conf/mongodb.conf 
      mongo 
      
      4.解決rlimits太低
      WARNING: soft rlimits too low. rlimits set to 31771 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
      解決方法:
      vim /etc/profile
      ulimit -f unlimited
      ulimit -t unlimited
      ulimit -v unlimited
      ulimit -n 64000
      ulimit -m unlimited
      ulimit -u 64000
      
      生效配置:
      source /etc/profile
      驗(yàn)證:
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      mongod -f /opt/mongo_27017/conf/mongodb.conf 
      mongo 
      

      官方腳本

      [root@db01 ~]# cat /etc/init.d/disable-transparent-hugepages
      #!/bin/bash
      
      ### BEGIN INIT INFO
      
      # Provides:          disable-transparent-hugepages
      
      # Required-Start:    $local_fs
      
      # Required-Stop:
      
      # X-Start-Before:    mongod mongodb-mms-automation-agent
      
      # Default-Start:     2 3 4 5
      
      # Default-Stop:      0 1 6
      
      # Short-Description: Disable Linux transparent huge pages
      
      # Description:       Disable Linux transparent huge pages, to improve
      
      # database performance.
      
      ### END INIT INFO
      
      case $1 in
        start)
          if [ -d /sys/kernel/mm/transparent_hugepage ]; then
            thp_path=/sys/kernel/mm/transparent_hugepage
          elif [ -d /sys/kernel/mm/redhat_transparent_hugepage ]; then
            thp_path=/sys/kernel/mm/redhat_transparent_hugepage
          else
            return 0
          fi
      
      echo 'never' > ${thp_path}/enabled
      echo 'never' > ${thp_path}/defrag
      
      re='^[0-1]+$'
      if [[ $(cat ${thp_path}/khugepaged/defrag) =~ $re ]]
      then
        # RHEL 7
        echo 0  > ${thp_path}/khugepaged/defrag
      else
        # RHEL 6
        echo 'no' > ${thp_path}/khugepaged/defrag
      fi
      
      unset re
      unset thp_path
      ;;
      esac
      
      [root@db01 ~]# chkconfig --add disable-transparent-hugepages
      [root@db01 ~]# chkconfig --list|grep disable
      

      查詢命令

      1.查詢一條,注意大小寫字母
      db.user_info.findOne()
      
      2.查詢所有
      db.user_info.find()
      
      3.查詢符合條件
      db.user_info.find({"age":28})
      select * from user_info where age = 28;
      
      4.查詢嵌套的條件
      db.inventory.find( { "size.uom": "in" } )
      db.inventory.find( 
      	{ 
      		"size.uom": "in" 
      	} 
      )
      
      5.邏輯查詢:and
      db.inventory.find( { "size.uom": "cm" ,"status" : "A"} )
      db.inventory.find( 
      	{ 
      		"size.uom": "cm" ,
      		"status" : "A"
      	} 
      )
      
      6.邏輯查詢 或
      db.inventory.find(
      	{
      		$or:[
      				{status:"D"},
      				{qty:{$lt:30}}
      			]
      	}
      )
      
      7.邏輯查詢+或+and+正則表達(dá)式
      db.inventory.find({status:"A",$or:[{qty:{$lt:30}},{item:/^p/}]})
      db.inventory.find( 
      	{
      		status: "A",
      		$or: [ 
      				{ qty: { $lt: 30 } }, 
      				{ item: /^p/ } 
      			 ]
      	} 
      )
      
      db.inventory.find( 
      	{
      		status: "A",
      		$or: [ 
      				{ qty: { $gt: 30 } }, 
      				{ item: /^p/ } 
      			 ]
      	} 
      )
      
      

      插入命令

      查看指令
      test:登錄時(shí)默認(rèn)存在的庫(kù)
      admin庫(kù):系統(tǒng)預(yù)留庫(kù),MongoDB系統(tǒng)管理庫(kù)
      local庫(kù):本地預(yù)留庫(kù),存儲(chǔ)關(guān)鍵日志
      config庫(kù):MongoDB配置信息庫(kù)
      
      查看數(shù)據(jù)庫(kù)命令
      show databases/show dbs
      show tables/show collections
      use admin
      db/select database()
      
      插入命令
      1.插入單條
      db.user_info.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.user_info.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.user_info.insert({"name":"yazhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.user_info.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.user_info.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)","sex":"boy"})
      
      
      2.插入多條
      db.inventory.insertMany( [
          { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
          { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
          { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
          { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
          { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
      ]);
      
      

      跟新數(shù)據(jù)

      更新數(shù)據(jù)
      1.更改匹配條件的單條數(shù)據(jù)
      db.inventory.find({ "item" : "paper" })
      db.inventory.updateOne{ "item" : "paper" },{$set: {  "size.uom" : "cm",  "status" : "P" }})
      db.inventory.updateOne(
          { "item" : "paper" },
          {
            $set: {  
      				"size.uom" : "cm",  
      				"status" : "P" 
      			}
          }
      )
      
      2.更改匹配條件的多條數(shù)據(jù)
      db.inventory.find({ "qty" : { $lt: 50 } })
      db.inventory.updateMany(
          { "qty" : { $lt: 50 } },
          {
             $set: 
      			{ 
      				"size.uom" : "mm", 
      				"status": "P" 
      			}
          }
      )
      
      3.添加字段
      db.user_info.find({ "age" : 27})
      db.user_info.updateMany(
          { "age" : 27},
          {
             $set: 
      			{ 
      				"pet" : "cat"
      			}
          }
      )
      

      創(chuàng)建索引

      索引
      1.查看執(zhí)行計(jì)劃
      db.user_info.find({"age":{ $lt: 30 }})
      db.user_info.find({"age":{ $lt: 30 }}).explain() #查看詳細(xì)的信息
      
      2.創(chuàng)建索引
      db.user_info.createIndex({ age: 1 },{background: true})
      
      注:建索引過程會(huì)阻塞其它數(shù)據(jù)庫(kù)操作,background可指定以后臺(tái)方式創(chuàng)建索引,即增加 "background" 可選參數(shù)。 "background" 默認(rèn)值為false。
      
      3.查看索引
      db.user_info.getIndexes()
      
      4.再次查看執(zhí)行計(jì)劃
      db.user_info.find({"age":{ $lt: 30 }}).explain()
      
      關(guān)鍵詞
      "stage" : "IXSCAN"
      "indexName" : "age_1"
      
      5.刪除索引
      db.user_info.dropIndex("age_1")
      
      db.user_info.dropIndex("age_1")
      
      其他索引類型
      COLLSCAN – Collection scan  #全表掃描
      IXSCAN – Scan of data in index keys  #索引掃描
      FETCH – Retrieving documents          檢出掃描
      SHARD_MERGE – Merging results from shards #合并分片中結(jié)果
      SORT – Explicit sort rather than using index orde
      
      COLLSCAN 集合掃描
      IXSCAN 索引掃描
      FETCH 檢出文檔
      SHARD_MERGE 合并分片中結(jié)果
      SHARDING_FILTER 分片中過濾掉孤立文檔
      LIMIT 使用limit 限制返回?cái)?shù)
      PROJECTION 使用 skip 進(jìn)行跳過
      IDHACK 針對(duì)_id進(jìn)行查詢
      COUNT 利用db.coll.explain().count()之類進(jìn)行count運(yùn)算
      COUNTSCAN count不使用Index進(jìn)行count時(shí)的stage返回
      COUNT_SCAN count使用了Index進(jìn)行count時(shí)的stage返回
      SUBPLA 未使用到索引的$or查詢的stage返回
      TEXT 使用全文索引進(jìn)行查詢時(shí)候的stage返回
      PROJECTION 限定返回字段時(shí)候stage的返回
      參照文檔:
      https:///article/detail/179.html?from=csdn
      

      刪除

      1.先查找需要?jiǎng)h除的數(shù)據(jù)
      db.inventory.find({"status":"P"})
      
      2.刪除單條
      db.inventory.deleteOne({"status":"P"})
      
      3.刪除多個(gè)
      db.inventory.deleteMany({"status":"P"})
      
      4.刪除索引
      db.user_info.dropIndex("age_1")
      
      4.刪除集合
      show dbs
      db 
      show tables
      db.inventory.drop()
      
      5.刪除庫(kù)
      show dbs
      db 
      db.dropDatabase()
      

      mongo工具

      mongo工具
      0.命令介紹
      mongod			#啟動(dòng)命令
      mongo			#登錄命令         
      mongodump   	#備份導(dǎo)出,全備壓縮
      mongorestore 	#恢復(fù)
      mongoexport   	#備份,數(shù)據(jù)可讀json
      mongoimport 	#恢復(fù)
      mongostat		#查看mongo運(yùn)行狀態(tài)
      mongotop		#查看mongo運(yùn)行狀態(tài)
      mongos  		#集群分片命令
      
      1.mongostat
      各字段解釋說明:
      insert/s : 官方解釋是每秒插入數(shù)據(jù)庫(kù)的對(duì)象數(shù)量,如果是slave,則數(shù)值前有*,則表示復(fù)制集操作
      query/s : 每秒的查詢操作次數(shù)
      update/s : 每秒的更新操作次數(shù)
      delete/s : 每秒的刪除操作次數(shù)
      getmore/s: 每秒查詢cursor(游標(biāo))時(shí)的getmore操作數(shù)
      command: 每秒執(zhí)行的命令數(shù),在主從系統(tǒng)中會(huì)顯示兩個(gè)值(例如 3|0),分表代表 本地|復(fù)制 命令
      注: 一秒內(nèi)執(zhí)行的命令數(shù)比如批量插入,只認(rèn)為是一條命令(所以意義應(yīng)該不大)
      dirty: 僅僅針對(duì)WiredTiger引擎,官網(wǎng)解釋是臟數(shù)據(jù)字節(jié)的緩存百分比
      used:僅僅針對(duì)WiredTiger引擎,官網(wǎng)解釋是正在使用中的緩存百分比
      flushes: 一般0或者偶爾出現(xiàn)1,一直出現(xiàn)有問題
      For WiredTiger引擎:指checkpoint的觸發(fā)次數(shù)在一個(gè)輪詢間隔期間
      For MMAPv1 引擎:每秒執(zhí)行fsync將數(shù)據(jù)寫入硬盤的次數(shù)
      注:一般都是0,間斷性會(huì)是1, 通過計(jì)算兩個(gè)1之間的間隔時(shí)間,可以大致了解多長(zhǎng)時(shí)間flush一次。flush開銷是很大的,如果頻繁的flush,可能就要找找原因了
      vsize: 虛擬內(nèi)存使用量,單位MB (這是 在mongostat 最后一次調(diào)用的總數(shù)據(jù))
      res:  物理內(nèi)存使用量,單位MB (這是 在mongostat 最后一次調(diào)用的總數(shù)據(jù))
      注:這個(gè)和你用top看到的一樣, vsize一般不會(huì)有大的變動(dòng), res會(huì)慢慢的上升,如果res經(jīng)常突然下降,去查查是否有別的程序狂吃內(nèi)存。
      
      qr: 客戶端等待從MongoDB實(shí)例讀數(shù)據(jù)的隊(duì)列長(zhǎng)度
      qw:客戶端等待從MongoDB實(shí)例寫入數(shù)據(jù)的隊(duì)列長(zhǎng)度
      ar: 執(zhí)行讀操作的活躍客戶端數(shù)量
      aw: 執(zhí)行寫操作的活客戶端數(shù)量
      注:如果這兩個(gè)數(shù)值很大,那么就是DB被堵住了,DB的處理速度不及請(qǐng)求速度。看看是否有開銷很大的慢查詢。如果查詢一切正常,確實(shí)是負(fù)載很大,就需要加機(jī)器了
      netIn:MongoDB實(shí)例的網(wǎng)絡(luò)進(jìn)流量
      netOut:MongoDB實(shí)例的網(wǎng)絡(luò)出流量
      注:此兩項(xiàng)字段表名網(wǎng)絡(luò)帶寬壓力,一般情況下,不會(huì)成為瓶頸
      conn: 打開連接的總數(shù),是qr,qw,ar,aw的總和
      注:MongoDB為每一個(gè)連接創(chuàng)建一個(gè)線程,線程的創(chuàng)建與釋放也會(huì)有開銷,所以盡量要適當(dāng)配置連接數(shù)的啟動(dòng)參數(shù),maxIncomingConnections,阿里工程師建議在5000以下,基本滿足多數(shù)場(chǎng)景
      
      

      用戶,權(quán)限

      創(chuàng)建用戶和角色
      0.與用戶相關(guān)的命令
      db.auth() 將用戶驗(yàn)證到數(shù)據(jù)庫(kù)。
      db.changeUserPassword() 更改現(xiàn)有用戶的密碼。
      db.createUser() 創(chuàng)建一個(gè)新用戶。
      db.dropUser() 刪除單個(gè)用戶。
      db.dropAllUsers() 刪除與數(shù)據(jù)庫(kù)關(guān)聯(lián)的所有用戶。
      db.getUser() 返回有關(guān)指定用戶的信息。
      db.getUsers() 返回有關(guān)與數(shù)據(jù)庫(kù)關(guān)聯(lián)的所有用戶的信息。
      db.grantRolesToUser() 授予用戶角色及其特權(quán)。
      db.removeUser() 已過時(shí)。從數(shù)據(jù)庫(kù)中刪除用戶。
      db.revokeRolesFromUser() 從用戶中刪除角色。
      db.updateUser() 更新用戶數(shù)據(jù)。
      
      
      1.創(chuàng)建管理用戶
      mongo db01:27017
      use admin 
      db.createUser(
      	{
      		user: "admin",
      		pwd: "123456",
      		roles:[ 
      				{ 
      					role: "root", 
      					db:"admin"
      				}
      			  ]
      	}	
      )
      
      2.查看創(chuàng)建的用戶
      db.getUsers()
      
      3.配置文件添加權(quán)限認(rèn)證參數(shù)/opt/mongo_27017/conf/mongodb.conf
      配置問權(quán)限認(rèn)證后需要重啟節(jié)點(diǎn),再次登陸如果不使用賬號(hào)密碼就查看不了數(shù)據(jù)
      security:     
        authorization: enabled
      
      4.重啟mongo
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      mongod -f /opt/mongo_27017/conf/mongodb.conf
      
      5.使用admin用戶登錄
      mongo db01:27017 -uadmin -p --authenticationDatabase admin
      
      6.創(chuàng)建其他用戶
      use test
      db.createUser(
        {
          user: "mysun",
          pwd: "123456",
          roles: [ { role: "readWrite", db: "write" },
                   { role: "read", db: "read" } ]
        }
      )
      
      7.創(chuàng)建測(cè)試數(shù)據(jù)
      use write
      db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.write.insert({"name":"yazhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)","sex":"boy"})
      
      use read
      db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      db.read.insert({"name":"yazhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)"})
      db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝陽區(qū)","sex":"boy"})
      
      8.退出admin,使用mysun用戶登錄
      mongo db01:27017 -umysun -p --authenticationDatabase test
      use write
      db.write.find()
      db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      
      use read
      db.read.find()
      db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝陽區(qū)"})
      
      
      9.修改用戶權(quán)限
      use test
      db.updateUser(
        'mysun',
        { 
          pwd: "123456",
          roles: [ { role: "readWrite", db: "write" },
                   { role: "readWrite", db: "read" } ,
      			 { role: "readWrite", db: "test" }
      			 ]
      			 
        }
      )
      
      10.刪除用戶
      db.getUsers()
      db.dropUser('mysun')
      
      

      mongo副本集配置

      mongo副本集配置
      1.創(chuàng)建節(jié)點(diǎn)目錄和數(shù)據(jù)目錄
      su - mongo 
      mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
      mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}  
      mkdir -p /data/mongo_2801{7,8,9}
      
      2.創(chuàng)建配置文件
      cat >/opt/mongo_28017/conf/mongo_28017.conf <<EOF
      systemLog:
        destination: file   
        logAppend: true  
        path: /opt/mongo_28017/log/mongodb.log
      
      storage:
        journal:
          enabled: true
        dbPath: /data/mongo_28017
        directoryPerDB: true
        wiredTiger:
           engineConfig:
              cacheSizeGB: 0.5 
              directoryForIndexes: true
           collectionConfig:
              blockCompressor: zlib
           indexConfig:
              prefixCompression: true
      
      processManagement:
        fork: true
        pidFilePath: /opt/mongo_28017/pid/mongod.pid
      
      net:
        port: 28017
        bindIp: 127.0.0.1,10.0.0.51
      
      replication:
         oplogSizeMB: 1024 
         replSetName: dba
      EOF
      
      3.復(fù)制配置文件到其他節(jié)點(diǎn)
      cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28018/conf/mongo_28018.conf
      cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28019/conf/mongo_28019.conf
      
      4.替換端口號(hào)
      sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongo_28018.conf  
      sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongo_28019.conf
      
      5.啟動(dòng)所有節(jié)點(diǎn)
      mongod -f /opt/mongo_28017/conf/mongo_28017.conf
      mongod -f /opt/mongo_28018/conf/mongo_28018.conf
      mongod -f /opt/mongo_28019/conf/mongo_28019.conf
      
      6.初始化集群
      config = {
      			_id : "dba", 
      			members : [
      						{_id : 0, host : "db01:28017"},
      						{_id : 1, host : "db01:28018"},
      						{_id : 2, host : "db01:28019"},
      			]}
      rs.initiate(config) 
      
      #登錄
      mongo db01:28017
      
      
      7.插入數(shù)據(jù)
      db.inventory.insertMany( [
          { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
          { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
          { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
          { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
          { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
      ]);
       
      8.副本節(jié)點(diǎn)登錄查看數(shù)據(jù)
      rs.slaveOk()
      use test
      db.inventory.find()
      
      9.設(shè)置副本可讀
      方法1:臨時(shí)生效
      rs.slaveOk()
      
      方法2:寫入啟動(dòng)文件
      echo "rs.slaveOk()" > ~/.mongorc.js
      
      查看副本集狀態(tài)
      
      rs.slaveOk()	#讓副本可以讀	
      rs.status()		#查看副本集詳細(xì)狀態(tài)	
      rs.isMaster()	#查看當(dāng)前的主節(jié)點(diǎn)是誰
      rs.printReplicationInfo()		#oplog記錄信息
      rs.printSlaveReplicationInfo()	#查看復(fù)制延遲信息
      rs.config()		#打印當(dāng)前副本集的配置信息
      
      停節(jié)點(diǎn)
      使用這條命令的前提是必須使用localhost登陸,否則會(huì)提示報(bào)錯(cuò)
      use admin
      db.shutdownserver()
      

      副本集權(quán)重調(diào)整

      副本集權(quán)重調(diào)整
      0.模擬故障轉(zhuǎn)移
      mongod -f /opt/mongo_28017/conf/mongo_28017.conf --shutdown
      mongod -f /opt/mongo_28017/conf/mongo_28017.conf
      
      1.查看當(dāng)前副本集配置
      rs.conf()
      
      2.設(shè)置權(quán)重(主節(jié)點(diǎn))
      config=rs.conf()
      config.members[0].priority=100
      rs.reconfig(config)
      
      3.主節(jié)點(diǎn)主動(dòng)降級(jí)
      rs.stepDown()
      
      4.恢復(fù)成默認(rèn)的權(quán)重
      config=rs.conf()
      config.members[0].priority=1
      rs.reconfig(config)
      

      增加新節(jié)點(diǎn)

      創(chuàng)建新節(jié)點(diǎn)目錄及啟動(dòng)
      
      [mongo@db01 ~]$ mkdir /opt/mongo_28010/{conf,logs,pid} -p
      
      [mongo@db01 ~]$ mkdir /data/mongo_28010
      
      [mongo@db01 ~]$ cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28010/conf/mongo_28010.conf
      
      [mongo@db01 ~]$ sed -i 's#28017#28010#g' /opt/mongo_28010/conf/mongo_28010.conf
      
      [mongo@db01 ~]$ mongod -f /opt/mongo_28010/conf/mongo_28010.conf
      
      [mongo@db01 ~]$ mongo db01:28010
      
      \>
      
      增加新節(jié)點(diǎn)命令,主庫(kù)操作
      
      [mongo@db01 ~]$ mongo db01:28017
      
      dba:PRIMARY> use admin
      
      switched to db admin
      
      dba:PRIMARY> rs.add("db01:28010")
      
      {
      
      ?        "ok" : 1,
      
      ?        "operationTime" : Timestamp(1572787956, 1),
      
      ?        "$clusterTime" : {
      
      ?                "clusterTime" : Timestamp(1572787956, 1),
      
      ?                "signature" : {
      
      ?                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      
      ?                        "keyId" : NumberLong(0)
      
      ?                }
      
      ?        }
      
      }
      
      查看新增加節(jié)點(diǎn)
      
      [mongo@db01 ~]$ mongo db01:28010
      
      dba:SECONDARY>
      

      刪除舊節(jié)點(diǎn)

      主節(jié)點(diǎn)操作
      
      [mongo@db01 ~]$ mongo db01:28017
      
      dba:PRIMARY> rs.remove("db01:28010")
      
      {
      
      ?        "ok" : 1,
      
      ?        "operationTime" : Timestamp(1572787994, 1),
      
      ?        "$clusterTime" : {
      
      ?                "clusterTime" : Timestamp(1572787994, 1),
      
      ?                "signature" : {
      
      ?                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      
      ?                        "keyId" : NumberLong(0)
      
      ?                }
      
      ?        }
      
      }
      
      再次查看下線節(jié)點(diǎn)
      
      [mongo@db01 ~]$ mongo db01:28010
      
      dba:OTHER>
      
      現(xiàn)在可以關(guān)閉節(jié)點(diǎn)了
      
      [mongo@db01 ~]$ mongod -f /opt/mongo_28010/conf/mongo_28010.conf --shutdown
      

      沖裁節(jié)點(diǎn)

      仲裁節(jié)點(diǎn)
      
      1.創(chuàng)建新節(jié)點(diǎn)并啟動(dòng)
      mkdir -p /opt/mongo_28011/{conf,log,pid}
      mkdir -p /data/mongo_28011
      cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28011/conf/mongo_28011.conf
      sed -i 's#28017#28011#g' /opt/mongo_28011/conf/mongo_28011.conf
      mongod -f /opt/mongo_28011/conf/mongo_28011.conf
      mongo db01:28011
      
      2.將仲裁節(jié)點(diǎn)加入集群
      rs.addArb("db01:28010")
      #移除
      rs.remove("db01:28010")
      

      mongo備份與恢復(fù)

      常用選項(xiàng)

      導(dǎo)出:
      $ mongoexport --help 
      參數(shù)說明:
      -h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
      -u:指明數(shù)據(jù)庫(kù)的用戶名
      -p:指明數(shù)據(jù)庫(kù)的密碼
      -d:指明數(shù)據(jù)庫(kù)的名字
      -c:指明collection的名字
      -f:指明要導(dǎo)出那些列
      -o:指明到要導(dǎo)出的文件名
      -q:指明導(dǎo)出數(shù)據(jù)的過濾條件
      --authenticationDatabase admin
      
      恢復(fù)
      $ mongoimport --help
      參數(shù)說明:
      -h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
      -u:指明數(shù)據(jù)庫(kù)的用戶名
      -p:指明數(shù)據(jù)庫(kù)的密碼
      -d:指明數(shù)據(jù)庫(kù)的名字
      -c:指明collection的名字
      -f:指明要導(dǎo)入那些列
      -j, --numInsertionWorkers=<number>  number of insert operations to run concurrently                                                  (defaults to 1)
      //并行
      
      mongo備份與恢復(fù)
      
      1.工具介紹
      (1)mongoexport/mongoimport
      (2)mongodump/mongorestore
      
      2.應(yīng)用場(chǎng)景
      1.異構(gòu)平臺(tái)遷移  mysql <---> mongodb
      2.同平臺(tái),跨大版本:mongodb 2  ----> mongodb 3
      mongoexport/mongoimport:json csv
      
      日常備份恢復(fù)時(shí)使用.
      mongodump/mongorestore
      
      
      3.導(dǎo)出工具mongoexport,json格式
      單表備份
      mongoexport --port 27017 -d test -c inventory -o /data/inventory.json
      
      單表備份至csv格式,可以導(dǎo)出成excl表格
      mongoexport --port 27017 -d test -c user_info --type=csv -f name,age,ad -o /data/user_info.csv
      
      
      4.恢復(fù)
      mongoimport --port 27017 -d test -c inventory /data/inventory.json
      mongoimport --port 27017 -d test -c user_info --type=csv --headerline --file  /data/user_info.csv
      
      5.mysql數(shù)據(jù)遷移到mongo
      
      [root@db01 ~]# yum install mariadb mariadb-server -y
      
      配置mysql配置文件,增加安全導(dǎo)出目錄路徑
      cat > /etc/my.cnf << EOF
      secure-file-priv=/var/lib/mysql/
      #重啟
      systemctl restart mariadb.service  
      
      4.導(dǎo)入城市數(shù)據(jù)
      [root@db01 ~]# mysql
      MariaDB [(none)]> source /root/world.sql
      
      #將樣本數(shù)據(jù)導(dǎo)出成csv格式 
      select * from world.city into outfile '/var/lib/mysql/city.csv' fields terminated by ',';
      編輯csv文件,添加列名,
      ID,Name,CountryCode,District,Population
      
      mongoimport --port 27017 -d world -c city --type=csv --headerline --file  /data/city.csv
      mongoexport --port 27017 -d world -c city -o /data/city.json
      
      
      6.導(dǎo)出與恢復(fù)
      mongodump  --port 27017 -o /data/backup
      mongorestore --port 27017 -d world  /data/backup/world/ --drop
      mongorestore --port 27017 /data/backup/ --drop
      
      

      1.1 mongodump和mongorestore

      1.介紹:

      mongodump能夠在Mongodb運(yùn)行時(shí)進(jìn)行備份,它的工作原理是對(duì)運(yùn)行的Mongodb做查詢,然后將所有查到的文檔寫入磁盤。

      但是存在的問題時(shí)使用mongodump產(chǎn)生的備份不一定是數(shù)據(jù)庫(kù)的實(shí)時(shí)快照,如果我們?cè)趥浞輹r(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行了寫入操作,則備份出來的文件可能不完全和Mongodb實(shí)時(shí)數(shù)據(jù)相等。另外在備份時(shí)可能會(huì)對(duì)其它客戶端性能產(chǎn)生不利的影響。

      2.使用方法:

      $ mongodump --help
      
      參數(shù)說明:
      
      -h:指明數(shù)據(jù)庫(kù)宿主機(jī)的IP
      
      -u:指明數(shù)據(jù)庫(kù)的用戶名
      
      -p:指明數(shù)據(jù)庫(kù)的密碼
      
      -d:指明數(shù)據(jù)庫(kù)的名字
      
      -c:指明collection的名字
      
      -o:指明到要導(dǎo)出的文件名
      
      -q:指明導(dǎo)出數(shù)據(jù)的過濾條件
      
      -j, --numParallelCollections=  number of collections to dump in parallel (4 by default)
      
      --oplog  備份的同時(shí)備份oplog
      

      mongodump和mongorestore高級(jí)企業(yè)應(yīng)用(--oplog)

      注意:這是replica set或者master/slave模式專用

      1.oplog介紹(可以實(shí)現(xiàn)熱備)

      在replica set中oplog是一個(gè)定容集合(capped collection),它的默認(rèn)大小是磁盤空間的5%(可以通過--oplogSizeMB參數(shù)修改).

      位于local庫(kù)的db.oplog.rs,有興趣可以看看里面到底有些什么內(nèi)容。

      其中記錄的是整個(gè)mongodb實(shí)例一段時(shí)間內(nèi)數(shù)據(jù)庫(kù)的所有變更(插入/更新/刪除)操作。

      當(dāng)空間用完時(shí)新記錄自動(dòng)覆蓋最老的記錄。

      其覆蓋范圍被稱作oplog時(shí)間窗口。需要注意的是,因?yàn)閛plog是一個(gè)定容集合,

      所以時(shí)間窗口能覆蓋的范圍會(huì)因?yàn)槟銌挝粫r(shí)間內(nèi)的更新次數(shù)不同而變化

      想要查看當(dāng)前的oplog時(shí)間窗口預(yù)計(jì)值,可以使用以下命令:

      dba58:PRIMARY> use local
      dba58:PRIMARY> db.oplog.rs.find().pretty()
      ..................................
      "ts" : Timestamp(1562403898, 1),
      "op" : "n"
      "o"  :
      "i": insert
      "u": update
      "d": delete
      "c": db cmd
      ..................................
      dba58:PRIMARY> rs.printReplicationInfo()
      configured oplog size:   1024MB		#集合大小
      log length start to end: 104539secs (29.04hrs)	#預(yù)計(jì)窗口覆蓋時(shí)間
      oplog first event time:  Sat Jul 06 2019 17:02:15 GMT+0800 (CST)
      oplog last event time:   Sun Jul 07 2019 22:04:34 GMT+0800 (CST)
      now:                     Sun Jul 07 2019 22:04:38 GMT+0800 (CST)
      

      模擬誤刪除

      準(zhǔn)備測(cè)試數(shù)據(jù)
      全庫(kù)備份
      [root@db01 ~]# mkdir /data/backup
      [root@db01 ~]# chown -R mongo:mongo /data/backup/
      [root@db01 ~]# su - mongo
      #登錄mongodb
      use backup 
      db.backup.insertMany( [
          { "id": 1},
          { "id": 2},
      	{ "id": 3},
      ]);
      
      全備環(huán)境
      rm -rf /data/backup/* 備份
      mongodump --port 28017 --oplog -o /data/backup
      壓縮備份
      [mongo@db01 ~]$ mongodump  --port 28017 -o /data/backup --gzip
      [mongo@db01 ~]$ mongodump  --port 28017 -d world -o /data/backup --gzip
      
      增加新數(shù)據(jù)
      mongo db01:28017
      use backup 
      db.backup.insertMany( [
          { "id": 4},
          { "id": 5},
      	{ "id": 6},
      ]);
      
      模擬刪除集合
      mongo db01:28017
      use backup 
      db.backup.drop()
      
      備份oplog
      mongodump --port 28017 -d local -c oplog.rs  -o /data/backup
      
      查找誤操作時(shí)間點(diǎn)
      use local 
      db.oplog.rs.find({ns:"backup.$cmd"}).pretty();
      
      找到時(shí)間點(diǎn)信息
      "ts" : Timestamp(1575023546, 1),
      
      
      恢復(fù)數(shù)據(jù)
      cd /data/backup/local/
      cp oplog.rs.bson ../oplog.bson
      rm -rf /data/backup/local/
      mongorestore --port 28017 --oplogReplay --oplogLimit "1575023546:1"  --drop  /data/backup/
      

      升級(jí)步驟

      1.首先確保是副本集狀態(tài)

      2.先關(guān)閉1個(gè)副本節(jié)點(diǎn)

      3.檢測(cè)數(shù)據(jù)是否可以升級(jí)

      4.升級(jí)副本節(jié)點(diǎn)的可執(zhí)行文件

      5.更新配置文件

      6.啟動(dòng)升級(jí)后的副本節(jié)點(diǎn)

      7.確保集群工作正常

      8.滾動(dòng)升級(jí)其他副本節(jié)點(diǎn)

      9.最后主節(jié)點(diǎn)降級(jí)

      10.確保集群 可用

      11.關(guān)閉降級(jí)的老的主節(jié)點(diǎn)

      12.升級(jí)老的主節(jié)點(diǎn)

      13.重新加入集群

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多