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.mzph.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…