Mongodb 安裝、使用

基礎概念html

  • MongoDB 元素概念
    • databases: 數據庫;
    • collections:表;(collections組成了databases)
    • documents:行;(documents組成了collections)
  • MongoDB 沒有新建數據庫的命令,只要進行 insert 或其它操做,MongoDB 就會自動幫你創建數據庫和 collection。當查詢一個不存在的 collection 時也不會出錯,MongoDB 會認爲那是一個空的 collection。
  • 一個對象被插入到數據庫中時,若是它沒有 ID,會自動生成一個 "_id" 字段,爲 12 字節(24位)16進制數。
  • 固然若是插入文檔不帶 _id,則系統會幫你自動建立一個,若是本身指定了就用本身指定的。

若是你用 Spring Data MongoDB 依賴請注意java

  • 請先看官網最新支持到哪一個版本的依賴:docs.spring.io/spring-data…
    • 查看錨點爲:What’s new in Spring Data MongoDB 的內容,好比:What’s new in Spring Data MongoDB 1.10,出現這樣一句話:Compatible with MongoDB Server 3.4 and the MongoDB Java Driver 3.4
  • 目前 201712 支持 MongoDB 3.4

若是你用 Robomongo 客戶端請注意linux

Docker 下安裝 MongoDBgit

  • 先建立一個宿主機之後用來存放數據的目錄:mkdir -p /data/docker/mongo/db
  • 賦權:chmod 777 -R /data/docker/mongo/db
  • 首次運行鏡像:docker run --name cloud-mongo -p 27017:27017 -v /data/docker/mongo/db:/data/db -d mongo:3.4
  • 進入容器中 mongo shell 交互界面:docker exec -it cloud-mongo mongo adg_mongo_db
  • 建立一個用戶:

db.createUser(github

{spring

user: "adguser",mongodb

pwd: "adg123456",docker

roles: [ shell

{ role: "dbAdmin", db: "adg_mongo_db" },數據庫

{ role: "readWrite", db: "adg_mongo_db" }

]

}

)

  • 而後停掉容器:docker stop cloud-mongo
  • 而後刪除容器:docker rm cloud-mongo
  • 從新運行鏡像,此次增長鬚要受權才能訪問的配置:docker run -d -p 27017:27017 -v /data/docker/mongo/db:/data/db --restart always --name cloud-mongo mongo:3.4 --auth
  • 從新啓動服務:docker restart cloud-mongo
  • 導出:docker exec -it cloud-mongo mongoexport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 -o /data/db/mongodb.json --type json
  • 導入:docker exec -it cloud-mongo mongoimport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 --file /data/db/mongodb.json --type json

安裝環境

  • CentOS 6

MongoDB 安裝

yum 卸載

  • yum remove "mongodb-org-*"

3.4.2 yum 安裝

  • 新建文件:vim /etc/yum.repos.d/mongodb-org-3.4.repo,文件內容以下:

[mongodb-org-3.4]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

  • 若是你要安裝 2.6 的版本,可使用下面這個內容:

[mongodb-org-2.6]

name=MongoDB 2.6 Repository

baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/

gpgcheck=0

enabled=1

  • 上面文件新建好以後,輸入安裝命令:yum install -y mongodb-org,一共有 5 個包,加起來有 100M 左右,國內下載速度不快,須要等等,可能還會出錯,若是出錯用國內源:mirror.tuna.tsinghua.edu.cn/help/mongod…
  • 開放防火牆端口:
    • iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
    • service iptables save
    • service iptables restart

3.6 yum 安裝:

  • 新建文件:vim /etc/yum.repos.d/mongodb-org-3.6.repo,文件內容以下:

[mongodb-org-3.6]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/testing/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

  • 上面文件新建好以後,輸入安裝命令:yum install -y mongodb-org,一共有 5 個包,加起來有 100M 左右,國內下載速度不快,須要等等,可能還會出錯,若是出錯用國內源:mirror.tuna.tsinghua.edu.cn/help/mongod…
  • 開放防火牆端口:
    • iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT
    • service iptables save
    • service iptables restart

3.4.10 tar 綠色安裝

  • 下載:wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.10.tgz
  • 解壓到指定目錄,並重命名:

tar zxvf mongodb-linux-x86_64-rhel62-3.4.10.gz


mv mongodb-linux-x86_64-rhel62-3.4.10 mongodb


mv mongodb /usr/program

  • 增長系統變量,我這裏是用 zsh

vim ~/.zshrc


export MONGODB_HOME=/usr/program/mongodb

export PATH=$MONGODB_HOME/bin:$PATH


source ~/.zshrc

  • 測試是否安裝成功:mongod -v,安裝成功會獲得以下信息:

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] MongoDB starting : pid=31155 port=27017 dbpath=/data/db 64-bit host=youmeek

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] db version v3.4.10

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] git version: 078f28920cb24de0dd479b5ea6c66c644f6326e9

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] allocator: tcmalloc

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] modules: none

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] build environment:

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distmod: rhel62

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] distarch: x86_64

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] target_arch: x86_64

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] options: { systemLog: { verbosity: 1 } }

2017-12-03T00:08:09.854+0800 D - [initandlisten] User Assertion: 29:Data directory /data/db not found. src/mongo/db/service_context_d.cpp 98

2017-12-03T00:08:09.854+0800 I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating

2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to close listening sockets...

2017-12-03T00:08:09.854+0800 I NETWORK [initandlisten] shutdown: going to flush diaglog...

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] now exiting

2017-12-03T00:08:09.854+0800 I CONTROL [initandlisten] shutting down with code:100

  • 建立數據庫、日誌存放目錄:

mkdir -p /usr/program/mongodb/data

mkdir -p /usr/program/mongodb/log

touch /usr/program/mongodb/log/mongodb.log

  • 建立配置文件:vim /etc/mongodb.conf,並寫入內容:

dbpath=/usr/program/mongodb/data

logpath=/usr/program/mongodb/log/mongodb.log

logappend=true

port=27017

fork=true

  • 看下是否已經有 mongo 在運行,若是有就 kill 掉:ps -ef | grep mongo
  • 經過配置文件啓動:mongod -f /etc/mongodb.conf
  • 顯示下面信息則表示啓動了:

about to fork child process, waiting until server is ready for connections.

forked process: 29167

child process started successfully, parent exiting

  • 進入 MongoDB 後臺管理 Shell:cd /usr/program/mongodb/bin && ./mongo
  • 建立數據庫:

use youmeek

  • 建立用戶,並受權,須要注意的是:dbAdmin 的權限是沒有包含 readWrite,因此不少時候要根據需求添加多個權限:

db.createUser(

{

user: "youmeek",

pwd: "youmeek123456",

roles: [

{ role: "dbAdmin", db: "youmeek" },

{ role: "readWrite", db: "youmeek" }

]

}

)

  • 開放防火牆端口:

iptables -A INPUT -p tcp -m tcp --dport 27017 -j ACCEPT

service iptables save

service iptables restart

  • 修改配置文件:vim /etc/mongodb.conf,在文件最後面增長一行:

auth=true

  • 表示開啓用戶認證,這樣後面要鏈接 mongo 就必須輸入數據庫、用戶名、密碼。
  • 而後重啓 mongo,開始使用。

其餘經常使用命令:

  • 檢查版本:mongod --version
  • 啓動:service mongod start
  • 中止:service mongod stop
  • 重啓:service mongod restart
  • 添加自啓動:chkconfig mongod on
  • 進入客戶端:mongo,若是有受權用戶格式爲:mongo 127.0.0.1:27017/admin -u 用戶名 -p 用戶密碼
  • 卸載命令:yum erase $(rpm -qa | grep mongodb-org)
    • 刪除數據庫:rm -r /var/lib/mongo
    • 刪除 log:rm -r /var/log/mongodb

添加受權用戶

  • 先進入 mongo 客戶端 :mongo
  • 輸入:use admin,而後輸入:

db.createUser(

{

user: "gitnavi",

pwd: "123456",

roles: [ { "role" : "dbAdmin", "db" : "youmeek_nav" } ]

}

)

  • 修改密碼:db.changeUserPassword(用戶名, 密碼)
  • 刪除用戶: db.removeUser(用戶名)
  • 內置角色:
    • read:容許用戶讀取指定數據庫
    • readWrite:容許用戶讀寫指定數據庫
    • dbAdmin:容許用戶在指定數據庫中執行管理函數,如索引建立、刪除,查看統計或訪問system.profile
    • userAdmin:容許用戶向system.users集合寫入,能夠找指定數據庫裏建立、刪除和管理用戶
    • clusterAdmin:只在admin數據庫中可用,賦予用戶全部分片和複製集相關函數的管理權限。
    • readAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀權限
    • readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的讀寫權限
    • userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限
    • dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的dbAdmin權限。
    • root:只在admin數據庫中可用。超級帳號,超級權限

MongoDB 配置

  • 編輯配置文件:vim /etc/mongod.conf,注意:編輯完記得重啓 MongoDB 服務
  • 默認的數據庫目錄:/var/lib/mongo
  • 默認的日誌目錄:/var/log/mongodb
  • 默認的配置文件內容:

bindIp:127.0.0.1 #註釋此行,表示除了本機也能夠登錄

# 補充這個,表示必須使用帶用戶名密碼的才能請求 mongodb,好比訪問 admin 數據庫:mongo 192.168.1.121:27017/admin -u 用戶名 -p 用戶密碼

security:

authorization: enabled

經常使用命令

  • show dbs,查看已有數據庫
  • use 數據庫名,進入指定數據庫,若是這個數據庫不存在了也是能夠進入的,進入以後 insert 一條語句就會自動建立了。
  • db,顯示當前用的數據庫
  • show collections,列出當前數據庫的collections(當前數據庫下的表)
  • show tables,查看數據庫中的集
  • exit,退出
  • show users,查看當前庫下的用戶
  • db.system.users.find().pretty(),查看全部用戶
  • db.dropAllUsers(),刪除全部用戶
  • db.dropDatebase(),刪除當前這個數據庫
  • db.集名稱.find(),查看集中的全部數據,等同於:select * from 表名稱
  • db.集名稱.findOne(),查看集中的一條數據,等同於:select * from 表名稱 limit 0,1
  • db.集名稱.find().limit(10),查看集中的一條數據
  • db.集名稱.find().sort({name:1}),查詢列表,根據字段name排序 #1正序 -1倒序
  • db.集名稱.find().sort({x:1}).skip(5).limit(10),查詢列表,根據字段name排序,等同於 select from foo order by x asc limit 5, 10
  • db.集名稱.find({x:10}),查詢列表,等同於 select from foo where x = 10
  • db.集名稱.find({x: {$lt:10}}),select from foo where x <= 10
  • db.集名稱.find({}, {y:true}),select y from foo
  • db.集名稱.find({"address.city":"gz"}),搜索嵌套文檔address中city值爲gz的記錄
  • db.集名稱.find({likes:"math"}),搜索數組
  • db.集名稱.insert({"a":1,"b":2}),插入一個測試數據
  • db.集名稱.find({name:"lichuang"}),根據索引或字段查找數據
  • db.集名稱.update({name:"張三"},{$set:{name:"李四"}}),更新數據,等同於:UPDATE 表名 SET name='李四' WHERE name = '張三'
  • db.集名稱.update({name:"張三"},{$set:{name:"李四"},{upsert:true},{multi:true}}),更新數據,等同於:UPDATE 表名 SET name='李四' WHERE name = '張三'。其中特殊的是 upsert 爲 true 的時候,表示若是沒有這條數據,則建立一條。multi 表示,全部知足條件的都進行更新,否則默認只找到的第一條更新。
  • db.集名稱.remove({name:"lichuang"}),刪除數據,等同於:DELETE FROM 表名 WHERE name='lichuang'
  • db.集名稱.drop(),刪除這個集合
  • db.集名稱.getIndexes(),查看集合索引
  • db.集名稱.dropIndex("name_1"),刪除索引
  • db.集名稱.ensureIndex({title:1}),建立索引
  • db.集名稱.ensureIndex({titile:1},{name:"indexname"}),建立索引,第二個屬性設置索引名稱
  • db.集名稱.ensureIndex({titile:1},{unique:true/false}),建立惟一索引,第二個屬性設置爲true說明該字段中值不能重複,false能夠重複
  • db.集名稱.ensureIndex({name:1,age:1}),複合索引
  • db.集名稱.ensureIndex({"address.city":1}),在嵌套文檔的字段上建索引
  • db.集名稱.insert({"article","text"}),全文索引,指定爲text類型,每一個數據集合中只容許建立一個全文索引
  • db.adminCommand( {setParameter:1, textSearchEnabled:true}),開啓全文本索引功能
  • 一些符號說明:

$lt ->less then 小於

$lte ->less than and equal 不大於

$lt ->less then 小於

$gt ->greater then 大於

$gte ->greater then and equal 不小於)

$ne ->not equal 不等於

導入 / 導出 / 備份 /還原

  • 數據的導出、導入
    • 導出:mongoexport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 -o /opt/mongodb.json --type json
    • 導入:mongoimport -h 127.0.0.1 -u 用戶名 -p 密碼 -d 庫名 -c 集合名 --file /opt/mongodb.json --type json

Java

GUI 管理工具

相關文章
相關標籤/搜索