Mongodb數據管理

Mongodb數據管理

1.登錄數據庫,查看默認的庫

[root@db51~]# mongo> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB> use admin
switched to db admin
> show tables
system.version
> 
  • admin庫:admin 是 MongoDB 的管理數據庫,用于存儲用戶、角色和系統范圍的配置。具有 admin 數據庫權限的用戶可以管理整個 MongoDB 實例
  • **config 庫:**如果 MongoDB 部署為分片集群(sharded cluster),config 數據庫會存儲分片信息和路由元數據
  • **local 數據庫:**存儲的是與本地節點相關的數據,不會被復制到其他節點。例如存儲復制集的元數據(如oplog.rs集合

2.1 命令分類

DB對象相關命令;

db.[TAB][TAB]
db.help()db.zhiyong.[TAB][TAB]
db.zhiyong.help()

RS復制集相關命令(replication set);

rs.[TAB][TAB]
rs.help()

SH分片集群相關命令(sharding cluster);

sh.[TAB][TAB]
sh.help()
> rs.help
function() {print("\trs.status()                                { replSetGetStatus : 1 } checks repl set status");
.......> db.getname
xiaoQ.getname

2.2 庫的管理

> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB# 相當于創建一個庫
> use wzyboy;
switched to db wzyboy# 刪除庫
> db.dropDatabase();
{ "ok" : 1 }# 創建一個叫 a 表
> db.createCollection("a");
{ "ok" : 1 }
> show tables
a# 隨意插入數據
switched to db wzy666
> db.test.insert({name:"zhangsan"})
WriteResult({ "nInserted" : 1 })
> db.stu.insert({id:101,name:"zhangsan",age:20,gender:"m"})
WriteResult({ "nInserted" : 1 })
> show tables;
stu# 查詢指定數據
> db.log.find({uid:999})
{ "_id" : ObjectId("66b19bbddd8229605d070b7e"), "uid" : 999, "name" : "mongodb", "age" : 6, "date" : ISODate("2024-08-06T03:42:53.818Z") }# 設置顯示50條信息
> DBQuery.shellBatchSize=50;
50> db.log.find()
...
# 顯示出50條數據~

2.3 文檔操作

# 數據錄入到log表
> for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
WriteResult({ "nInserted" : 1 })# 查詢數據行數
> db.log.count()
10000# 全表信息查詢
> db.log.find()
{ "_id" : ObjectId("6403169ac7c3cb20a4ebd465"), "uid" : 0, "name" : "mongodb", "age" : 6, "date" : ISODate("2021-06-04T09:59:54.234Z") }
{ "_id" : ObjectId("6403169ac7c3cb20a4ebd466"), "uid" : 1, "name" : "mongodb", "age" : 6, "date" : ISODate("2021-06-04T09:59:54.240Z") }
{ "_id" : ObjectId("6403169ac7c3cb20a4ebd467"), "uid" : 2, "name" : "mongodb", "age" : 6, "date" : ISODate("2021-06-04T09:59:54.241Z") }
-- 默認每頁顯示20行數據信息# 每頁顯示50條記錄信息
> DBQuery.shellBatchSize=50;
50
> db.log.find()# 按照條件查詢數據
> db.log.find({uid:999})
{ "_id" : ObjectId("6403169ac7c3cb20a4ebd84c"), "uid" : 999, "name" : "mongodb", "age" : 6, "date" : ISODate("2021-06-04T09:59:54.548Z") }# 以標準的json格式輸出內容
> db.log.find({uid:999}).pretty()
{"_id" : ObjectId("6403169ac7c3cb20a4ebd84c"),"uid" : 999,"name" : "mongodb","age" : 6,"date" : ISODate("2021-06-04T09:59:54.548Z")
}# 刪除集合中所有記錄,表示清空集合中的所有文檔內容
> db.log.remove({})
WriteResult({ "nRemoved" : 10000 })
> db.log.find()# 或者表示將文檔內容和集合信息全部刪除
> db.log.drop()
true
> show tables# 查看集合存儲信息
> for(i=0;i<10000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
WriteResult({ "nInserted" : 1 })> db.log.totalSize()
40960# 或者集合中索引+數據庫壓縮存儲之后的大小
> db.log.stats()

2.4 用戶管理

用戶管理概述

驗證庫(authenticationDatabase):建立用戶時use到的庫,就是驗證庫,在使用用戶時,要加上驗證庫才能登錄,主要限制遠程

對于管理員用戶,必須在admin下創建:

  • 建立用戶時,use到的庫,就是此用戶的驗證庫
  • 登錄時,必須明確指定驗證庫才能登錄
  • 通常,管理員用的驗證庫是admin,普通用戶的驗證庫一般是所管理的庫設置為驗證庫
  • 如果直接登錄到數據庫,不進行use,默認的驗證庫是test,不是企業生產建議的
  • 從3.6版本開始,不添加bindIp參數,默認不讓遠程登錄,只能本地管理員登錄(遠程登錄需要配置bindIp參數)

創建超級管理員

1.管理所有數據庫(必須use admin再去創建)

> use admin
switched to db admin> db.createUser(
{"user": "root","pwd": "root123","roles": [{"role": "root","db": "admin"}]
}
)# 輸出內容:
Successfully added user: {"user" : "root","roles" : [{"role" : "root","db" : "admin"}]
}# 驗證用戶是否創建成功
> db.auth('root','root123')# 查看指定用戶
db.getUser("root")# 修改用戶的密碼,以root為例
// 切換到 admin 數據庫
use admin
// 修改 root 用戶的密碼
db.changeUserPassword("root", "this_is_new_password")# 查看一個庫的所有用戶
use admin
db.getUsers()[{"_id" : "admin.app02","userId" : UUID("b9945460-b130-4958-8f9d-e7383a412e5d"),"user" : "app02","db" : "admin","roles" : [{"role" : "readWrite","db" : "wzyboy"}],"mechanisms" : ["SCRAM-SHA-1","SCRAM-SHA-256"]},{"_id" : "admin.root","userId" : UUID("7d31739d-3535-4b76-99d2-e2b3def9d069"),"user" : "root","db" : "admin","roles" : [{"role" : "root","db" : "admin"}],"mechanisms" : ["SCRAM-SHA-1","SCRAM-SHA-256"]}
]

2.配置文件中,加入以下驗證功能配置,然后重啟數據庫,就可以實現mongodb身份驗證功能

cat >> /mongodb/conf/mongodb.yaml <<EOF
security:authorization: enabled
EOF

3.進行用戶登錄驗證,本地登錄不需要加驗證庫信息

# 本地登錄用戶驗證
[root@db51~]# mongo -uroot -proot123 admin> use admin
switched to db admin
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
wzy     0.000GB> use admin
switched to db admin
> db.auth('root','root123')
1

4.遠程登錄用戶驗證,遠程登錄必須加驗證庫信息

# 登錄時就直接驗證
[root@db51~]# mongo -uroot -proot123 10.0.0.51:27017/admin
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
wzy     0.000GB[root@db51~]# mongo 10.0.0.51:27017/admin
# 沒有驗證通過時不能看到數據庫的
> show databases;
> use admin
switched to db admin
> db.auth('root','root123')
1
> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
wzy     0.000GB

5.使用navicat工具進行連接

在這里插入圖片描述

創建普通用戶

1.創建一個普通用戶app01,并授予對 wzyboy 庫的管理權限

> use wzyboy
switched to db wzyboy
> db.createUser(
{user: "app01",pwd: "app01",roles: [ { role: "readWrite", db: "wzyboy" } ]
}
)# 輸出結果:應用程序用戶創建成功
Successfully added user: {"user" : "app01","roles" : [{"role" : "readWrite","db" : "wzyboy"}]
}# 應用程序用戶是否創建成功
> db.auth('app01','app01')
1# 插入表測試
> db.student.insert({name:"zhangsan"})
WriteResult({ "nInserted" : 1 })# 驗證數據寫入成功
> DBQuery.shellBatchSize=2;
> db.student.find()
{ "_id" : ObjectId("6766509af1117827689ed0b2"), "name" : "zhangsan" }

2.進行用戶登錄驗證

# 本地登錄用戶驗證,本地登錄應用程序用戶登錄也需要加驗證庫信息
[root@db51~]# mongo -uapp01 -papp01 wzyboy> use wzyboy> show tables;
log
stu
test# 遠程登錄用戶驗證
[mongod@master ~]$ mongo -uapp01 -papp01 192.168.30.101:27017/wzyboy
> use admin
switched to db admin
> db.auth('app01','app01')
Error: Authentication failed.
0
-- 訪問非驗證庫會出現報錯信息
> use wzyboy
switched to db wzyboy
>  db.auth('app01','app01')
1
-- 遠程登錄必須加驗證庫信息,訪問對應驗證庫信息會順利完成驗證

用戶刪除

刪除指定用戶,必須進入到指定的驗證庫中,才能刪除相應的用戶信息

[root@db51~]# mongo -uroot -proot123 10.0.0.51:27017/admin
> use wzyboy
> db.createUser ({user:"app02",pwd:"app02",roles:[{role:"readWrite",db:"wzyboy"}]})> use wzyboy;
> db.dropUser("app02")
true

用戶總結

創建用戶要有驗證庫信息,管理員對應admin庫,普通用戶對應要管理的庫

用戶進行數據庫服務遠程登錄時,要注意登錄命令中有驗證庫信息

2.5 MongoDB的數據備份

2.5.1 數備備份/恢復工具介紹

序號備份工具命令恢復工具命令
邏輯備份-單表遷移 json csvmongoexportmongoimport
物理備份-全庫操作 分庫分表mongodumpmongorestore

兩種類型的備份恢復工具應用場景區別:

類型一:(mongoexport/mongoimport)

  • 異構平臺遷移,比如:mysql <—> mongodb
  • 相同平臺遷移,比如:跨版本遷移 mongodb 2 —> mongodb 3

類型二:(mongodump/mongorestore)

  • 日常數據信息備份保存使用;
  • 日常數據信息恢復修復使用;

2.5.2 數據庫導出

1 mongoexport

數據導出工具:mongoexport

獲取幫助:mongoexport --help

參數解釋說明
-h指明數據庫宿主機的IP
-u指明數據庫宿主機的用戶名
-p指明數據庫的密碼
-d指定數據庫的名稱
-c指定數據集合名稱
-f指明要導出哪些列
-o指明導出后的文件名
-q指明導出數據的過濾條件
–authenticationDatabase指明驗證庫信息

1.沒有使用密碼時的備份方式。

本次備份的是之前分片集群里的zhiyong庫中的vast集合

mongoexport --port 38017 -d zhiyong -c vast -o /mongodb/vast.json

2.如果設置了認證,那么備份方式為:

mongoexport \
-uroot -proot123 --port 27017 \
--authenticationDatabase admin -d zhiyong -c vast \
-o /mongodb/vast.json

3.單表 vast 備份為csv格式

mongoexport \
--port 38017 -d zhiyong -c vast --type=csv \
-f id,name,age,date \
-o /mongodb/vast.csv

2 mongodump

1.全量備份數據(也可以-d 指定要備份的庫)

mongodump \-h localhost:27017 \-o /tmp/mong_export \-u root \-p='123456789' \--authenticationDatabase=admin# 查看備份成功的數據
[root@db51 ~]# ll /tmp/mong_export/
drwxr-xr-x 2 root root 4096 Feb 12 17:20 admin
drwxr-xr-x 2 root root 4096 Feb 12 17:22 wzyboy

2.創建一個新的實例27018,執行數據恢復操作

mongorestore \-h localhost:27018 \/tmp/mong_export

3.登錄27018實例,驗證恢復的庫wzyboy

mongo --host 127.0.0.1 --port 27018> show databases;
admin   0.000GB
config  0.000GB
local   0.000GB
wzyboy  0.000GB
> use wzyboy;
switched to db wzyboy
> show tables;
a
test

恢復選項

1.注:如果設置了密碼可以這樣進行數據恢復

mongorestore \-h localhost:27018 \-u root \-p='aa' \--authenticationDatabase=admin \/tmp/mong_export

2.如果只需要恢復某個數據庫,可以指定數據庫名稱

mongorestore \-h localhost:27018 \--db wzyboy \/tmp/mong_export/wzyboy

3.如果只需要恢復某個集合,可以指定集合名稱:

mongorestore \-h localhost:27018 \/tmp/mong_export/wzyboy \--collection your_collection_name \/tmp/mong_export/your_database_name/your_collection_name.bson

2.5.3 數據導入mongoimport

參數解釋說明
-h指明數據庫宿主機的IP
-u指明數據庫宿主機的用戶名
-p指明數據庫的密碼
-d指定數據庫的名稱
-c指定數據集合名稱
-f指明要導入哪些列
-j指定并行導入的行數信息
–authenticationDatabase指明驗證庫信息

1 json恢復

1.帶密碼的備份:

如果導入的表已經存在,可以在導入命令中加入 drop參數,將源表刪除在導入

mongoimport \
-uroot -proot123 --port 27017 \
--authenticationDatabase admin \
-d zhiyong -c vast1 /mongodb/log.json

2.還是以分片集群為例測試數據導入:

mongoimport --port 38017 \
-d zhiyong -c vast1 /mongodb/vast.json

3.驗證導入成功

[root@db51~]# mongo --port 38017mongos> use zhiyong;mongos> show tables;
vast
vast1

2 csv恢復

如果要帶入csv格式文件中的內容,需要通過–type參數指定導入格式

還是用之前導出的csv文件

ls /mongodb/vast.*
/mongodb/vast.csv  /mongodb/vast.json

1.csv格式的文件頭行,headerline參數表示指定第一行是列名,不需要導入

mongoimport --port 38017 -d zhiyong -c vast2 --type=csv --headerline --file  /mongodb/vast.csv

2.驗證導入成功

mongos> show tables;
vast
vast1
vast2

2.5.4 異構平臺遷移案例

1.以mysql8.0.26導出json為例,需開啟安全目錄設置

cat >> /data/3306/my.cnf <<EOF
secure-file-priv=/tmp
EOF

2.開始把數據導出為/tmp/json

select * from world.city into outfile '/tmp/city.csv' fields terminated by ',';

3.處理備份后的csv文件,添加表頭信息

vim /tmp/city.csv
ID,Name,CountryCode,District,Population

4.遷移數據導入到mongodb數據庫

mongoimport --port 38017 -d world -c city --type=csv -f \
ID,Name,CountryCode,District,Population \
--file /tmp/city.csv

5.在navicat查看數據

在這里插入圖片描述

6.MySQL導出數據為 csv

先創建表,接受要存儲的數據

DROP TABLE IF EXISTS wzy1.test_info;CREATE TABLE wzy1.test_info (id INT,city_name VARCHAR(255),country_code VARCHAR(10),region VARCHAR(255),population INT
);

iv=/tmp
EOF


2.開始把數據導出為/tmp/json```sql
select * from world.city into outfile '/tmp/city.csv' fields terminated by ',';

3.處理備份后的csv文件,添加表頭信息

vim /tmp/city.csv
ID,Name,CountryCode,District,Population

4.遷移數據導入到mongodb數據庫

mongoimport --port 38017 -d world -c city --type=csv -f \
ID,Name,CountryCode,District,Population \
--file /tmp/city.csv

5.在navicat查看數據

[外鏈圖片轉存中…(img-axmKWEED-1739555316937)]

6.MySQL導出數據為 csv

先創建表,接受要存儲的數據

DROP TABLE IF EXISTS wzy1.test_info;CREATE TABLE wzy1.test_info (id INT,city_name VARCHAR(255),country_code VARCHAR(10),region VARCHAR(255),population INT
);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71371.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71371.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71371.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QT基礎七、用純代碼編寫界面

終于迎來了界面開發的實戰環節&#xff01;今天我們將通過純代碼的方式&#xff0c;親手打造一個界面。如果你對 Qt 感興趣&#xff0c;歡迎訂閱我的 Qt 基礎入門專欄 &#xff08;完全免費哦&#xff09;。雖然前面幾篇文章主要是基礎知識講解&#xff0c;可能會顯得稍微平淡&…

我用AI做數據分析之數據清洗

我用AI做數據分析之數據清洗 AI與數據分析的融合效果怎樣&#xff1f; 這里描述自己在使用AI進行數據分析&#xff08;數據清洗&#xff09;過程中的幾個小故事&#xff1a; 1. 變量名的翻譯 有一個項目是某醫生自己收集的數據&#xff0c;變量名使用的是中文&#xff0c;分…

C++11 thread

文章目錄 C11 線程庫線程對象的構造方式無參的構造函數調用帶參的構造函數調用移動構造函數thread常用成員函數 this_thread命名空間join && detachmutex C11 線程庫 線程對象的構造方式 無參的構造函數 1、調用無參的構造函數,調用無參的構造函數創建出來的線程對象…

List<Map<String, Object>> 如何對某個字段求和

在Java中&#xff0c;如果你有一個List<Map<String, Object>>的結構&#xff0c;并且你想要對某個特定字段進行求和&#xff0c;你可以使用Java 8的Stream API來簡化這個過程。下面是一個示例代碼&#xff0c;演示如何對某個字段進行求和。 假設你有一個List<M…

Linux 固定 IP 地址和網關

Linux 固定 IP 地址和網關 查看 IP ifconfig ifconfig eth0 ip addr ip addr show eth0 查看網關 ip route show route -n netstat -rn 設置固定 IP // 配置靜態IP文件/etc/network/interfaces $ vi /etc/network/interfacesauto eth0 iface eth0 inet static addre…

移動通信發展史

概念解釋 第一代網絡通信 1G 第二代網絡通信 2G 第三代網絡通信 3G 第四代網絡通信 4G 4g網絡有很高的速率和很低的延時——高到500M的上傳和1G的下載 日常中的4G只是用到了4G技術 運營商 移動-從民企到國企 聯通-南方教育口有人 電信 鐵通&#xff1a;成立于 2000 年…

進階數據結構——樹狀數組

前言 看這篇文章前我建議你們先看這個視頻還有這個視頻&#xff0c;不然你們可能看不懂。 一、樹狀數組的核心思想與本質 核心思想&#xff1a;樹狀數組&#xff08;Fenwick Tree&#xff09;是一種用于高效處理前綴和查詢和單點更新的數據結構。 本質&#xff1a;通過二進…

LabVIEW無刷電機控制器檢測系統

開發了一種基于LabVIEW的無刷電機控制器檢測系統。由于無刷電機具有高效率、低能耗等優點&#xff0c;在電動領域有取代傳統電機的趨勢&#xff0c;而無刷電機的核心部件無刷電機控制器產量也在不斷增長。然而&#xff0c;無刷電機控制器的出廠檢測仍處于半自動化狀態&#xff…

STM32 CAN過濾器配置和應用方法介紹

目錄 概述 一、CAN過濾器核心概念 二、過濾器配置步驟&#xff08;以標準ID為例&#xff09; 三、不同模式的配置示例 四、高級配置技巧 五、調試與問題排查 六、關鍵計算公式 總結 概述 在STM32微控制器中&#xff0c;CAN過濾器可以配置為標識符屏蔽模式和標識符列表模…

個人系統架構技術分享

架構技術 技術版本說明CentOS7.9操作系統Amoeba負責MySQL讀寫分離NFS分布式存儲ISCSI塊存儲keepalived日志收集MySQL5.7數據庫存儲MinIO8.4.5對象存儲Kubernetes1.23.15應用容器管理平臺Redis7.0分布式緩存Elasticsearch7.17.3搜索引擎nacos3.3.4服務注冊 后端技術 技術版本…

python進階篇-面向對象

1.對象的定義 1.1 什么是對象 面向過程&#xff1a;將程序流程化 對象&#xff1a;就是“容器“&#xff0c;是用來存儲數據和功能的&#xff0c;是數據和功能的集合體。 面向對象和面向過程沒有優劣之分&#xff0c;它們只是使用的場景不同罷了。 1.2 為什么要有對象 有…

網絡安全“掛圖作戰“及其場景

文章目錄 一、網絡安全掛圖作戰來源與定義1、網絡安全掛圖作戰的來源2、網絡安全掛圖作戰的定義 二、掛圖作戰關鍵技術三、掛圖作戰與傳統態勢感知的差異四、掛圖作戰主要場景五、未來趨勢結語 一、網絡安全掛圖作戰來源與定義 1、網絡安全掛圖作戰的來源 網絡安全掛圖作戰的…

【嵌入式Linux應用開發基礎】read函數與write函數

目錄 一、read 函數 1.1. 函數原型 1.2. 參數說明 1.3. 返回值 1.4. 示例代碼 二、write 函數 2.1. 函數原型 2.2. 參數說明 2.3. 返回值 2.4. 示例代碼 三、關鍵注意事項 3.1 部分讀寫 3.2 錯誤處理 3.3 阻塞與非阻塞模式 3.4 數據持久化 3.5 線程安全 四、嵌…

嵌入式八股文(四)計算機網絡篇

第一章 基礎概念 1. 服務 指網絡中各層為緊鄰的上層提供的功能調用,是垂直的。包括面向連接服務、無連接服務、可靠服務、不可靠服務。 2. 協議 是計算機?絡相互通信的對等層實體之間交換信息時必須遵守的規則或約定的集合。?絡協議的三個基本要素:語法、…

LabVIEW 天然氣水合物電聲聯合探測

天然氣水合物被認為是潛在的清潔能源&#xff0c;其儲量豐富&#xff0c;預計將在未來能源格局中扮演重要角色。由于其獨特的物理化學特性&#xff0c;天然氣水合物的探測面臨諸多挑戰&#xff0c;涉及溫度、壓力、電學信號、聲學信號等多個參數。傳統的人工操作方式不僅效率低…

JAVA代碼走查重構常用prompt

代碼重構prompt&#xff1a; ## 主題&#xff1a; 代碼重構 ## 角色扮演: 你是軟件開發大師Martin Fowler&#xff0c;精通代碼重構、面向對象編程、Clean Code和設計模式&#xff0c;且熟練掌握《重構&#xff0c;改善既有代碼的設計》這本書中的重構思想和各種重構方法。 ## …

[數據結構]紅黑樹,詳細圖解插入

目錄 一、紅黑樹的概念 二、紅黑樹的性質 三、紅黑樹節點的定義 四、紅黑樹的插入&#xff08;步驟&#xff09; 1.為什么新插入的節點必須給紅色&#xff1f; 2、插入紅色節點后&#xff0c;判定紅黑樹性質是否被破壞 五、插入出現連續紅節點情況分析圖解&#xff08;看…

STM32 HAL庫USART串口DMA IDLE中斷編程:避坑指南

HAL_UART_Receive接收最容易丟數據了,STM32 HAL庫UART查詢方式實例 可以考慮用中斷來實現,但是HAL_UART_Receive_IT還不能直接用,容易數據丟失,實際工作中不會這樣用,STM32 HAL庫USART串口中斷編程&#xff1a;演示數據丟失, 需要在此基礎優化一下. STM32F103 HAL庫USART串口…

sql注入中information_schema被過濾的問題

目錄 一、information_schema庫的作用 二、獲得表名 2.1 sys.schema_auto_increment_columns 2.2 schema_table_statistics 三、獲得列名 join … using … order by盲注 子查詢 在進行sql注入時&#xff0c;我們經常會使用information_schema來進行爆數據庫名、表名、…

Jenkins 給任務分配 節點(Node)、設置工作空間目錄

Jenkins 給任務分配 節點(Node)、設置工作空間目錄 創建 Freestyle project 類型 任務 任務配置 Node 打開任務-> Configure-> General 勾選 Restrict where this project can be run Label Expression 填寫一個 Node 的 Label&#xff0c;輸入有效的 Label名字&#x…