MongoDB深入學習總結(上)
MongoDB
一、產品介紹
MongoDB是由C++語言編寫的一個基于分布式文件存儲的開源NoSQL數據庫系統,在高負載的情況下,可添加更多的節點(實例),以保證服務性能,在許多場景下用于代替傳統的關系型數據庫或鍵/值存儲方式,皆在為Web應用提供可擴展的高性能數據存儲解決方案。
MongoDB提供了一個面向文檔的存儲方式,操作起來比較簡單和容易,可以存儲比較復雜的數據類型,是一個面向集合的,模式自由的文檔型數據庫。
MongoDB基本概念
文檔(document)是MongoDB中數據的基本單元,非常類似于關系型數據庫系統中的行(但比行復雜的多)。
集合(collection)就是一組文檔,如果說MongoDB中的文檔類似于關系型數據庫的行,那么集合就如同數據表
MongoDB的單個計算機可以容納多個獨立的數據庫,每一個數據庫都有自己的集合和權限。
MongoDB ??關系型數據庫
文檔(document) ??行(row)
集合(collection) 表(table)
數據庫(database) 數據庫(database)
日志文件類型
系統日志文件 logpath
journal日志文件(沒怎么用過)
oplog復制操作日志文件(相當于MySQL中的bin-log 二進制日志)
慢查詢日志
數據類型
(1)BSON 的數據類型
null,代表空或者不存在
布爾,只有 true 和 false
數字,64 位浮點數
字符串,utf8 字符串
數組,值或者列表可表示為數組
對象,對象的數據
(2)BSON 的特點
優點:簡單,簡潔,容易理解、解析、記憶
(3)命名規則
文檔的鍵命名幾乎所有 utf8 字符,只有少數例外:$開頭;
文檔的鍵命名幾乎所有 utf8 字符,只有少數例外:$開頭;\0(空字符);_下劃線開頭。
(空字符);_下劃線開頭。集合的命名幾乎所有 utf8 字符,只有少數例外:$開頭;
集合的命名幾乎所有 utf8 字符,只有少數例外:$開頭;\0(空字符);system.開頭;””
(空字符);system.開頭;””空字符串。
數據庫的命名幾乎所有 utf8 字符,只有少數例外:””空字符串;
數據庫的命名幾乎所有 utf8 字符,只有少數例外:””空字符串;\0;空格;. 點;\ ;/。
;空格;. 點;\ ;/。MongoDB的安裝
指定同一個進程同一時間最多開啟的文件數:ulimit -n
設置上述數值為65535(大一些就可以):ulimit -n 65535
設置用戶最多開啟的程序數目:ulimit -u 65535
yum安裝wget:yum -y install wget
安裝MongoDB的tar包,地址如下,執行命令:wget
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.
0
.
6
.tgz
解壓到/usr/src下:tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz -C /usr/src/
為該文件創建軟連接:ln -s /usr/src/mongodb-linux-x86_64-rhel70-4.0.6 /usr/local/mongodb
將bin目錄中的shell腳本鏈接到/bin下:ln -s /usr/local/mongodb/bin/ /bin/
創建數據目錄,日志文件及目錄并創建相應的配置文件(因為MongoDB的包中沒有自帶這些東西,所以需要我們自己來配置)
首先在/data目錄下創建目錄:mkdir -p /data/mongodb1
在/data/logs目錄下創建目錄:mkdir -p /data/logs/mongodb
在/data/logs目錄下創建文件:touch /data/logs/mongodb/mongodb1.log
在/usr/local/mongodb下創建conf目錄:mkdir /usr/local/mongodb/conf
在conf目錄下創建mongodb的配置文件:vim /usr/local/mongodc/conf/mongodb1.conf
內容如下
啟動,并指定配置文件:/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb1.conf
查看進程ps -aux|grep :27107
設置開機自啟動:vim /etc/rc.local ,插入下面這兩句
rm -f /data/mongodb1/mongod.lock
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
進入bin內執行./mongo啟動服務
MongoDB多實例配置
進入mongodb的目錄,復制conf配置文件:cd /usr/src/mongodb-linux-x86_64-rhel70-4.0.6/conf/
復制配置文件:cp mongodb1.conf mongodb2.conf
編輯conf文件:vim mongodb2.conf
主要更改端口號、數據庫路徑以及日志輸出路徑:
創建mongodb2目錄:mkdir /data/mongodb2
創建log日志文件:touch /data/logs/mongodb/mongodb2.log
為該文件添加一個權限:chmod 777 /data/logs/mongodb/mongodb2.log
啟動,且指定配置文件:usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod -f /usr/src/mongodb-linux-x86_64-rhel70-4.0.6/conf/mongodb2.conf
啟動成功
查看一下進程和端口號:netstat -anptu|grep mongod
多實例構建成功,如果想進入某一個庫,在執行mongo的時候需要--port指定端口號。
Mongodb基本操作
show databases ?查看當前實例下數據庫列表
show users 顯示用戶
use
help()顯示數據庫操作命令
show tables 顯示當前數據庫中的集合
mycoll.help()顯示集合操作命令,mycoll是當前下叫做mycoll的集合
foo.find()對當前數據庫中foo集合進行數據查找
數據庫(database)操作
一個mongodb中可以建立多個數據庫
MongoDB的默認數據庫為“db”,該數據庫存儲在data目錄中
MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。
插入數據
>use cloud
>db.user.insert({“id”:1,“name”:“Crushlinux”});
查看數據
> db.user.find()?????該命令可以補全
查看幫助
>db.help
插入一行數據
> use study
switched to db study
> db.t1.insert({"id":2,"name":"Tom","isadmin":true,"gender":null,"favorite":["apple","banana","orange"],"regtime":new Date()})
查剛插入的數據
>db.t1.find()
顯示某一字段類型
> db.t1.findOne({"id" : 2})
定義一個變量a,讓剛剛輸出的內容定義為a
>a = db.t1.findOne({“id”:2})
判斷字段是什么數據類型
>typeof(a.id)
查詢操作
數據的備份與恢復
數據備份方法
數據導入命令:mongoimport
數據導出命令:mongoexport
備份
邏輯備份:mongodump
物理備份:冷備份
恢復:mongorestore
復制數據庫
復制本地數據庫:db.copyDatabase(“from_db”,“to_db”,“localhost”)
復制遠程數據庫:db.copyDatabase(“from_db”,“to_db”,“192.168.1.100”)
將MySQL中的數據導入MongoDB
select * from t1 into outfile '/var/lib/mysql/t1_mysql.csv' fields terminated by",";
將csv文件導入mongodb數據庫
/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongoimport -d cloud -c tt1 -f id,name --file /var/lib/mysql/t1_mysql.csv --type csv
將mongodb中的cloud數據庫的user集合,導出到/tmp/user.json文件中
/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongoexport -d cloud -c user -o /tmp/user.json
mongodump備份
Mongodump命令腳本語法如下
mongodump -h dbhost -d dbname -o dbdirectory
-h:mongodb所在的服務器地址,例如:127.0.0.1,當然也可以指定端口號:127.0.0.1:27017
-d:需要備份的數據庫實例,例如:test
-o:備份的數據存放位置
例:創建目錄:mkdir /backup
執行備份:/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongodump -d cloud -c user -o /backup/
mongorestore還原
Mongorestore命令腳本語法如下:
mongorestore -h hostname -d dbname path --host<:port>,-h<:port>
例:/usr/src/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongorestore -d crushlinux --dir=/backup/cloud/
復制數據庫(在數據庫內操作,此處localhost可以改成其他主機ip:端口號)
>db.copyDatabase(“crushlinux”,”crushlinux2”,”localhost”)
克隆集合(數據庫內操作)
>db.runCommand({“cloneCollection”:“db1.student”,“from”:“localhost:27018”})
MongoDB安全管理
MongoDB角色管理
內置角色
數據庫角色:read、readWrite
數據庫管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
備份恢復角色:backup、restore
所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級用戶角色:root
內部角色:_system
MongoDB進程管理
數據庫內執行,查看進程:currentOp()
MongoDB監控管理
查看數據庫實例的狀態信息:serverStatus()
MongoDB復制集集群部署及管理
MongoDB復制
將一個數據庫實例中的所有數據改變復制到另一個獨立的數據庫實例的過程,默認是主從復制集群(未來不再使用)。缺點是一旦主庫出現故障,需要手動把主庫角色切換到最可靠的從庫上,而其他從庫還需配置新的主庫去同步。
復制是將數據同步在多個服務器的過程
復制提供了數據的冗余備份,并在多個服務器上存儲數據副本,提高了數據的可用性,并可以保證數據的安全性。
復制還允許您從硬件故障和服務中斷中恢復數據
復制的特征:
保障數據的安全性
數據高可用性(24*7)
災難恢復
無需停機維護(如備份,重建索引,壓縮)
分布式讀取數據
MongoDB復制集ReplSet
原理上也是MongoDB主從復制技術,但當主庫出現故障時,能自動實現主從切換,從而故障得以恢復,其他從庫自動從新的主庫上同步數據,整個過程不需要手動干預。類似于MySQL中的MHA技術。
MongoDB的復制至少需要兩個節點。其中一個是主節點,負責處理客戶端請求,其余的都是從節點,負責復制主節點上的數據。
MongoDB各個節點常見的搭配方式:一主一從,一主多從
主節點記錄在其上的所有操作oplog,從節點定期輪詢主節點獲取這些操作,然后對自己的數據副本執行這些操作,從而保證從節點的數據與主節點一致。
附件: MongoDB.docx 282.15KB 下載次數:2次
MongoDB 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。