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.rhkb.cn/news/20274.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GTP3 大模型

GTP3 大模型 模型架构训练核心思想 GTP3 : OpenAI 在 2020 年 5 月发布 GPT-3&#xff0c;发表 Language Models are Few-Shot Learner理念&#xff1a;Few-Shot 思想 , 用少量样本微调&#xff0c;让模型更准确 参数 : 最大模型 : 1750 亿参数多头 Transformer : 96 层Head…

神经网络实验——MLP

目录 1 目的 2 方法 3 源代码 4 结果 1 目的 ①熟悉 Python 的输入输出流; ②学会使用 matplotlib进行图像可视化; ③掌握神经网络的基本原理&#xff0c;学会使用 sklearn 库中的 MLPClassifier 函数构建基础的多层感知机神经网络分类器; ④学会使用网格查找进行超参数优…

Cursor 无限续杯

最近DeepSeek官网无法访问&#xff0c;导致DeepSeekCLine绑定的API Key也无法使用了。那么&#xff0c;除了DeepSeek&#xff0c;还有没有其他好用的AI编程工具呢&#xff1f;答案当然是Cursor&#xff01;不过&#xff0c;由于各种原因一直没有用上Cursor&#xff0c;也不知道…

Windows本地部署DeepSeek

文章目录 一、准备工作1、准备服务器2、准备APP 二、部署deepseek-r11、脚本部署2、脚本部署 三、ChatBox集成 一、准备工作 1、准备服务器 本案例使用Windows电脑 2、准备APP Download Ollama Download Chatbox 二、部署deepseek-r1 1、脚本部署 双击安装完Ollama,默认…

QML 自定义矩形框Rectangle,实现四个边框自定义大小

一、自定义矩形 效果图 边框大小为&#xff1a;左2 上2 右5 下10 简单来说&#xff0c;就是定义两个矩形&#xff0c;一个在外边一个在内部&#xff1b; 再通过设置他们的边距&#xff0c;即可设置相应的边框宽度&#xff1b; 1.编码 新建空的qml文件 MyRectangle.qml im…

筛选相同项

# import os # import pandas as pd# # 文件路径&#xff0c;根据实际情况修改 # file_path_1 rC:\Users\Administrator\Desktop\python\文件1.xlsx # file_path_2 rC:\Users\Administrator\Desktop\python\文件2.xlsximport os import pandas as pd# 获取当前脚本所在的目录…

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍&#xff0c;没有数据集文件详细的样子&#xff0c;下载数据集之后&#xff0c;对数据集具体的构成做一个补充的笔记。 下载链接&#xff1a;https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…

Bom详解和Dom详解

Javascript的数据类型 1.BOM(浏览器对象模型)1.1window对象(1)全局作用域&#xff1a;(2)窗口属性&#xff1a;(3)弹窗和对话框&#xff1a;(4)定时器&#xff1a;(5)导航和历史&#xff1a;(6)打开和关闭窗口&#xff1a; 1.2navigator对象(1)浏览器信息属性&#xff1a;(2)浏…

Android 虚拟机与ClassLoader类加载笔记

1 Android虚拟机 在介绍Android的虚拟机之前&#xff0c;我们先来看一下JVM虚拟机之下&#xff0c;我们的class文件的字节码指令的Demo&#xff1a; public class Demo {public static void test() {int a 1;int b 2;int c a b;} } 将Demo.class文件使用命令&#xff1a…

STM32 HAL库USART串口DMA IDLE中断编程:避坑指南

HAL_UART_Receive接收最容易丢数据了,STM32 HAL库UART查询方式实例 可以考虑用中断来实现,但是HAL_UART_Receive_IT还不能直接用,容易数据丢失,实际工作中不会这样用,STM32 HAL库USART串口中断编程&#xff1a;演示数据丢失, 需要在此基础优化一下. STM32F103 HAL库USART串口…

NBT群落物种级丰度鉴定新方法sylph

文章目录 简介为什么选择Sylph&#xff1f;Sylph的工作原理 Install使用解析成gtdb格式sylph 能做什么&#xff1f;sylph 不能做什么&#xff1f;ANI定义如何使用 sylph-utils 生成包含分类信息的配置文件耗时&#xff1a;66个样本耗时1h 转成easymicroplot可用数据 简介 Sylp…

VLM 系列——Qwen2.5 VL——论文解读——前瞻(源码解读)

引言 20250212苹果突然被爆将与阿里巴巴合作为中国 iPhone 用户开发人工智能功能。苹果从 2023 年就已经开始测试各类中国头部 AI 大厂开发的 AI 模型。去年&#xff0c;原本选定百度作为主要合作伙伴&#xff0c;但双方的合作并不顺利&#xff0c;百度为“Apple Intelligence”…

DeepSeek R1原理

文章目录 DeepSeek R1原理强化学习介绍Policy ModelCritic ModelReward Model三者关系智能体包含的内容环境包含的内容 知识蒸馏简介数据蒸馏Logits 蒸馏特征蒸馏 训练流程DeepSeek-R1-Zero 训练策略与价值设计奖励方式训练模板**实验观察到模型自我进化**缺点 DeepSeek-R1 训练…

如何使用DeepSeek + PlantUML/Mermaid 生成专业图表

目录 一、工具简介 1.1 DeepSeek简介 1.2 PlantUML简介 1.3 Mermaid在线工具简介 二、在DeepSeek中生成Mermaid语法 2.1 编写提示词 2.2 示例输出 2.3 访问Mermaid在线编辑器 三、在DeepSeek中生成PlantUML语法 3.1 编写提示词 3.2 示例输出 3.3 访问PlantUML在线编…

开源多商户商城源码最新版_适配微信小程序+H5+APP+PC多端

在数字化时代&#xff0c;电子商务已经成为各行业不可或缺的一部分&#xff0c;开源多商户商城源码为中小企业和个人开发者提供了快速搭建和定制电商平台的利器。分享一款最新版的开源多商户商城源码&#xff0c;它能够适配微信小程序、H5、APP和PC等多个端口&#xff0c;满足商…

PHP基础部分

但凡是和输入、写入相关的一定要预防别人植入恶意代码! HTML部分 语句格式 <br> <hr> 分割符 <p>插入一行 按住shift 输入! 然后按回车可快速输入html代码(VsCode需要先安装live server插件) html:<h1>标题 数字越大越往后</h1> <p…

短视频矩阵碰一碰发视频源码技术开发,支持OEM

在短视频矩阵碰一碰发视频的技术开发中&#xff0c;前端设计是直接面向用户的关键部分&#xff0c;它不仅决定了用户体验的好坏&#xff0c;还对整个系统的可用性和吸引力起着重要作用。本文将深入探讨在这一技术开发中前端设计的要点、流程与关键技术。 一、前端设计的整体架构…

大模型 + cursor应用案例

cursor 介绍 cursor是一个集成了GPT4、Claude 3.5等先进LLM的类vscode的编译器&#xff0c;可以理解为在vscode中集成了AI辅助编程助手&#xff0c;从下图中的页面可以看出cursor的布局和vscode基本一致&#xff0c;并且cursor的使用操作也和vscode一致&#xff0c;包括extens…

深入浅出CSS复合选择器:掌控元素关系与层级选择

目录 前言 一、子代选择器&#xff08;Descendant Selector&#xff09; 1. 什么是子代选择器&#xff1f; 2. 基本语法 3. 示例 4. 注意事项 二、直接子元素选择器&#xff08;Child Selector&#xff09; 1. 什么是直接子元素选择器&#xff1f; 2. 基本语法 3. 示例…

CSRF 漏洞原理演示 基本绕过(同源 异源) 配合XSSToken值校验复用删除

前言 CSRF的基本原理 就是 举例 我们伪造一个支付宝的转账请求&#xff08;抓包获取的&#xff09;&#xff0c;受害者 &#xff1a; 正好登录着支付宝&#xff08;后台&#xff09;的 同时点击了我们伪造的&#xff08;包含恶意请求&#xff09;网址 从而导致先我们进行转…