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 38017

mongos> 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
);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972643.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P8707 [蓝桥杯 2020 省 AB1] 走方格

#include <iostream> using namespace std; int f[31][31]; int main(){int n,m;scanf("%d%d",&n,&m);f[1][1]1;//边界&#xff1a;f(1,1)1for(int i1;i<n;i)for(int j1;j<m;j)if((i&1||j&1)&&(i!1||j!1))//i,j不均为偶数&#…

腿足机器人之七- 逆运动学

腿足机器人之七- 逆运动学 基本概念腿部运动的数学表示坐标系定义以及自由度说明正运动学模型 逆运动学求解几何解法数值迭代法雅可比矩阵法基础双足机器人步态规划中的雅可比法应用 工程挑战与解决方案实际应用中的工具和算法多解问题高自由度机器人&#xff08;如Atlas的28自…

【强化学习的数学原理】第10课-Actor-Critic方法-笔记

学习资料&#xff1a;bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接&#xff1a;强化学习的数学原理 西湖大学 赵世钰 文章目录 一、最简单的Actor-Critic&#xff08;QAC&#xff09;二、Advantage Actor-Critic&#xff08;A2C&#xff09;三、重要性采样和…

vtkCamera类的Dolly函数作用及相机拉近拉远

录 1. 预备知识 1.1.相机焦点 2. vtkCamera类的Dolly函数作用 3. 附加说明 1. 预备知识 要理解vtkCamera类的Dolly函数作用,就必须先了解vtkCamera类表示的相机的各种属性。  VTK是用vtkCamera类来表示三维渲染场景中的相机。vtkCamera负责把三维场景投影到二维平面,如…

JavaScript中的函数基础知识

JavaScript中的函数基础知识 1.函数声明的三种方式1.1 函数声明语句1.2 函数表达式1.3 new Function 2.函数的返回值3.函数调用的几种方法4.函数参数4.1 函数内部的arguments对象&#xff08;是个伪数组&#xff09;4.2 获取形参的个数4.3 函数不存在重载4.4 参数传递(1) 基本数…

fpga助教面试题

第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…

调用openssl实现加解密算法

由于工作中涉及到加解密&#xff0c;包括Hash&#xff08;SHA256&#xff09;算法、HMAC_SHA256 算法、ECDH算法、ECC签名算法、AES/CBC 128算法一共涉及5类算法&#xff0c;笔者通过查询发现openssl库以上算法都支持&#xff0c;索性借助openssl库实现上述5类算法。笔者用的op…

RTSP协议讲解及漏洞挖掘

文章目录 前言一、RTSP协议简介二、RTSP协议常见应用场景包括三、攻击RTSP协议的好处四、RTSP多种认证模式五、工具使用下载地址六、RTSP协议漏洞挖掘手法 前言 实时流传输协议&#xff08;Real Time Streaming Protocol&#xff0c;RTSP&#xff09;&#xff0c;RFC2326&…

Mysql各操作系统安装全详情

" 至高无上的命运啊~ " MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Mana…

Elasticsearch7.1.1 配置密码和SSL证书

生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码&#xff0c;如果需要设置密码&#xff0c;需要再配置给elasticsearch 在之前的步骤中&#xff0c;如果我们对elastic-certificates.p12 文件配置了密码…

EasyExcel 自定义头信息导出

需求&#xff1a;需要在导出 excel时&#xff0c;合并单元格自定义头信息(动态生成)&#xff0c;然后才是字段列表头即导出数据。 EasyExcel - 使用table去写入&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/quickstart/write#%E4%BD%BF%E7%94%A8table%E…

C++基础知识学习记录—模版和泛型编程

1、模板 概念&#xff1a; 模板可以让类或者函数支持一种通用类型&#xff0c;在编写时不指定固定的类型&#xff0c;在运行时才决定是什么类型&#xff0c;理论上讲可以支持任何类型&#xff0c;提高了代码的重用性。 模板可以让程序员专注于内部算法而忽略具体类型&#x…

Django 连接(sqlserver)数据库方法

文章目录 django 的SQL server适配器&#xff0c;例如django-pyodbc-azure 或 mssql-django1、django-pyodbc-azure2、mssql-django3、注意 Django只内置了几个 Database Backend&#xff08;mysql、oracle、sqllite3&#xff08;默认&#xff09;、postgresql_psycopg2&#x…

华为 eNSP:MSTP

一、MSTP是什么 MSTP是多业务传送平台&#xff08;Multi-Service Transport Platform&#xff09;的缩写&#xff0c;它是一种基于SDH&#xff08;同步数字体系&#xff09;技术的传输网络技术&#xff0c;用于同时实现TDM、ATM、以太网等多种业务的接入、处理和传送。 MSTP技…

Mac端homebrew安装配置

拷打了一下午o3-mini-high&#xff0c;不如这位博主的超强帖子&#xff0c;10分钟结束战斗 跟随该文章即可&#xff0c;2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次&#xff0c;点赞258次&#xff0c;收藏837次。一直觉得自己写…

一台服务器将docker image打包去另一天服务器安装这个镜像

一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…

Web开发技术概述

Web开发技术涵盖了前端和后端开发&#xff0c;以及数据库技术。前端开发包括使用HTML、CSS、JavaScript等原生技术&#xff0c;以及jQuery、Bootstrap、AngularJS、React、Vue等框架。后端开发则涉及ASP.NET、PHP、Python Web&#xff08;Flask、Django&#xff09;、Java Web&…

【项目日记】仿RabbitMQ实现消息队列 --- 模块设计

你要的答案不在书本里&#xff0c; 也不能靠别人来解决&#xff0c; 除非你想一辈子当小孩。 你必须在自我内部找到答案&#xff0c; 感受到该做的正确事情。 --- 《献给阿尔吉侬的花束》--- 仿RabbitMQ实现消息队列 1 数据管理模块1.1 交换机数据管理模块1.2 队列数据管…

C++ Primer 构造函数再探

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略

目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统&#xff08;DBMS&#xff09;架构与 SQL 注入 什么是 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入&#xff1f; 数据库分类 数据库类型&am…