MongoDB实战(5)数据管理和控制

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介:

一、数据的导入导出和备份恢复

数据导出:mongoexport

常用导出方法

1
2
3
mongoexport -d  test  -c stu -o stu.dat
connected to: 127.0.0.1
exported 10 records

导出数据的导出的方式使用的是JSON的样式

1
2
3
4
5
6
7
8
9
10
11
cat  stu.dat
"_id"  : 1,  "classid"  : 1,  "age"  : 14,  "name"  "Tom"  }
"_id"  : 2,  "classid"  : 1,  "age"  : 12,  "name"  "Jacky"  }
"_id"  : 3,  "classid"  : 2,  "age"  : 16,  "name"  "Lily"  }
"_id"  : 4,  "classid"  : 2,  "age"  : 9,  "name"  "Tony"  }
"_id"  : 5,  "classid"  : 2,  "age"  : 19,  "name"  "Harry"  }
"_id"  : 6,  "classid"  : 2,  "age"  : 13,  "name"  "Vincent"  }
"_id"  : 7,  "classid"  : 1,  "age"  : 14,  "name"  "Bill"  }
"_id"  : 8,  "classid"  : 2,  "age"  : 17,  "name"  "Bruce"  }
"_id"  : 9,  "classid"  : 3,  "age"  : 18,  "name"  "Gaici"  }
"_id"  : 10,  "classid"  : 3,  "age"  : 38,  "name"  "Leader"  }

参数说明:
-d指明使用的库,本例中为”test”
-c指明要导出的表,本例中为”stu”
-o指明要导出的文件名,本例中为”stu.dat”

导出CSV格式的文件

1
mongoexport -d  test  -c stu --csv -f classid,age,name -o stu_csv.dat

格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
cat  stu_csv.dat
classid,age,name
1.0,14.0, "Tom"
1.0,12.0, "Jacky"
2.0,16.0, "Lily"
2.0,9.0, "Tony"
2.0,19.0, "Harry"
2.0,13.0, "Vincent"
1.0,14.0, "Bill"
2.0,17.0, "Bruce"
3.0,18.0, "Gaici"
3.0,38.0, "Leader"

参数说明:
-csv指要要导出为csv格式
-f指明需要导出哪些例

数据导入:mongoimport

先将表删除

1
2
3
4
5
6
7
8
9
> db.stu.drop()
true
> show tables;
fs.chunks
fs.files
mycappc1
mycappc2
stu_res
system.indexes

然后导入数据

1
2
3
mongoimport -d  test  -c stu stu.dat
connected to: 127.0.0.1
Tue Nov 12 17:43:16.532 imported 10 objects

174600130.png

导入CSV数据

1
mongoimport -d  test  -c stu - type  csv --headerline -- file  stu_csv.dat

参数说明:
-type指明要导入的文件格式
-headerline批明不导入第一行,因为第一行是列名
-file指明要导入的文件路径
注意:
CSV格式良好,主流数据库都支持导出为CSV的格式,所以这种格式非常利于异构数据迁移


数据备份mongodump


可以用mongodump来做MongoDB的库或表级别的备份,下面举例说明:
备份test数据库

1
mongodump -d  test

此时会在当前目录下创建一个dump目录,用于存放备份出来的文件
175358587.png

也可以指定备份存放的目录

1
mongodump -d  test  -o my_test

这个例子中将备份的文件存在了当前目录下的my_test目录下

数据恢复mongorestore

由于刚刚已经做了备份,所以我们先将库test删除掉

1
2
db.dropDatabase()
"dropped"  "test" "ok"  : 1 }

接下来我们进行数据库恢复

1
mongorestore -d  test  dump/*

经验证数据库又回来了,其实要是想恢复库,也大可不必先删除test库,只要指
明–drop参数,就可以在恢复的时候先删除表然后再向表中插入数据的

二、访问控制

官方手册中启动MongoDB服务时没有任何参数,一旦客户端连接后可以对数据库任意操

作,而且可以远程访问数据库,所以推荐开发阶段可以不设置任何参数,但对于生产环境还

是要仔细考虑一下安全方面的因素,而提高MongoDB数据库安全有几个方面:

1、绑定IP内网地址访问MongoDB服务

MongoDB可以限制只允许某一特定IP来访问,只要在启动时加一个参数bind_ip即可,如
下:
服务端限制只有192.168.1.103这个IP可以访问MongoDB服务

1
. /mongod  --bind_ip 192.168.1.103

则只有IP为192.168.1.103的客户端可以访问

2、设置监听端口

官方默认的监听端口是27017,为了安全起见,一般都会修改这个监听端口,避免恶意的连

接尝试,具体如下:将服务端监听端口修改为28018

1
. /mongod  --bind_ip 192.168.1.103 --port 28018

端户访问时不指定端口,会连接到默认端口27017,对于本例会报错
所以当服务端指定了端口后,客户端必须要明确指定端口才可以正常访问

1
. /mongo  192.168.1.103:28018

3、使用用户名和口令登录

MongoDB默认的启动是不验证用户名和密码的,启动MongoDB后,可以直接用MongoDB连接
上来,对所有的库具有root权限。所以启动的时候指定参数,可以阻止客户端的访问和连接。
先启用系统的登录验证模块,只需在启动时指定auth参数即可,如:

1
. /mongod  --auth

连接一下试试

1
2
3
4
. /mongo
MongoDB shell version: 2.4.7
connecting to:  test
>

很奇怪,为什么我们启用了登录验证模块,但我们登录时没有指定用户,为什么还可以登录
呢?在最初始的时候MongoDB都默认有一个admin数据库(默认是空的),
而admin.system.users中将会保存比在其它数据库中设置的用户权限更大的用户信息。
注意:当admin.system.users中没有添加任何用户时,
即使MongoDB启动时添加了--auth参数,此时不进行任何认证依然可以使用任何操作,
直到你在admin.system.users中添加了一个用户。

1
2
3
4
5
6
7
8
use admin
db.addUser( 'root' , '123' )
{
"user"  "root" ,
"readOnly"  false ,
"pwd"  "c2eb464922307de3bc3aaf9593f1d49b" ,
"_id"  : ObjectId( "5282086396b7a4a6e3cb17ed" )
}

客户端连接试试:

185611308.png

连上test库了,但进一步操作时有异常,看来MongoDB允许未授权连接,不能进行任何操作。
本地客户端连接,指定用户,结果如下:
因为root是admin库的,所以只能连接admin,连接其他库是不能进入的。

1
2
3
4
5
. /mongo  -uroot -p123  test
MongoDB shell version: 2.4.7
connecting to:  test
Tue Nov 12 19:07:41.870 Error: 18 { code: 18, ok: 0.0, errmsg:  "auth fails"  } at src /mongo/shell/db .js:228
exception: login failed

只能进入admin然后再进行操作:

191315329.png

MongoDB也支持为某个特定的数据库来设置用户,如我们为test库设一个只读的用户

1
2
3
4
5
6
7
8
9
10
11
> use  test ;
switched to db  test
> db.addUser( 'test' , '123' , true )
{
"user"  "test" ,
"readOnly"  true ,
"pwd"  "e78333b96cbdc20a67432095f4741222" ,
"_id"  : ObjectId( "52820d76bca929d60ae67b5c" )
}
> db.auth( 'test' , '123' )
1

客户端用此用户来访问test,只能进行读操作,只针对test库

191812144.png






















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1324110,如需转载请自行联系原作者

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
5月前
|
SQL NoSQL 数据管理
数据管理DMS使用问题之如何批量导入MongoDB的数据文件
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
3月前
|
存储 数据管理 应用服务中间件
Docker的数据管理实战篇
关于Docker数据管理实战的教程,涵盖了Docker数据卷的使用、特点、场景以及数据卷容器的概念和应用。
71 13
Docker的数据管理实战篇
|
4月前
|
存储 NoSQL JavaScript
MongoDB存储过程实战:聚合框架、脚本、最佳实践,一文全掌握!
【8月更文挑战第24天】MongoDB是一款备受欢迎的文档型NoSQL数据库,以灵活的数据模型和强大功能著称。尽管其存储过程支持不如传统关系型数据库,本文深入探讨了MongoDB在此方面的最佳实践。包括利用聚合框架处理复杂业务逻辑、封装业务逻辑提高复用性、运用JavaScript脚本实现类似存储过程的功能以及考虑集成其他工具提升数据处理能力。通过示例代码展示如何创建订单处理集合并定义验证规则,虽未直接实现存储过程,但有效地演示了如何借助JavaScript脚本处理业务逻辑,为开发者提供更多实用指导。
83 2
|
4月前
|
JSON 数据管理 关系型数据库
【Dataphin V3.9】颠覆你的数据管理体验!API数据源接入与集成优化,如何让企业轻松驾驭海量异构数据,实现数据价值最大化?全面解析、实战案例、专业指导,带你解锁数据整合新技能!
【8月更文挑战第15天】随着大数据技术的发展,企业对数据处理的需求不断增长。Dataphin V3.9 版本提供更灵活的数据源接入和高效 API 集成能力,支持 MySQL、Oracle、Hive 等多种数据源,增强 RESTful 和 SOAP API 支持,简化外部数据服务集成。例如,可轻松从 RESTful API 获取销售数据并存储分析。此外,Dataphin V3.9 还提供数据同步工具和丰富的数据治理功能,确保数据质量和一致性,助力企业最大化数据价值。
215 1
|
4月前
|
NoSQL Java 测试技术
5-MongoDB实战演练
本文档详细介绍了如何使用MongoDB实现头条文章的评论系统。主要功能包括基本的增删改查API、根据文章ID查询评论、以及评论的点赞功能。文章分析了表结构设计,明确了各字段的意义,并给出了具体的字段类型。技术选型方面,文档推荐使用mongodb-driver作为Java连接MongoDB的驱动包,同时介绍了Spring Data MongoDB这一更高层次的持久层框架。此外,文档还提供了搭建文章微服务模块的具体步骤,包括项目工程的搭建、实体类的编写、索引的添加方式等,并展示了如何使用MongoTemplate实现评论点赞功能。
|
4月前
|
存储 NoSQL 数据管理
揭秘MongoDB时间序列集合:这个超级功能将如何彻底改变你的数据管理?
【8月更文挑战第8天】时间序列数据记录随时间变化的信息,在数据库管理中至关重要。MongoDB自4.0版起引入时间序列集合,专为这类数据优化存储与查询。通过问答形式介绍其特点:自动数据过期、高效存储机制及快速查询操作。创建时需指定时间字段及可选元数据字段。支持设置数据过期时间,采用粗粒度索引减少I/O操作。查询时可通过时间范围筛选数据,并利用聚合框架进行数据分析。随着实时分析需求的增长,时间序列集合的应用将更加广泛。
192 0
|
6月前
|
存储 NoSQL MongoDB
MongoDB实战面试指南:常见问题一网打尽
MongoDB实战面试指南:常见问题一网打尽
|
7月前
|
存储 关系型数据库 MySQL
数据管理的艺术:PolarDB开源版详评与实战部署策略(一)
PolarDB-X是阿里巴巴自研的高性能云原生分布式数据库,基于共享存储的Shared-nothing架构,支持MySQL生态,具备金融级高可用、分布式水平扩展、HTAP混合负载等能力。它通过CN(计算节点)和DN(存储节点)实现计算与存储分离,保证数据强一致性,并支持全局二级索引和多主多写。PolarDB-X开源版提供更高程度的定制化和控制权,适合追求技术自主性和成本优化的开发者。部署方式包括RPM包、PXD工具和Kubernetes,其中PXD工具提供了一键部署的便利性。
235370 22
|
7月前
|
存储 关系型数据库 分布式数据库
数据管理的艺术:PolarDB开源版详评与实战部署策略(二)
PolarDB-PG是阿里云的一款云原生关系型数据库,100%兼容PostgreSQL,支持Oracle语法,采用Shared-Storage存储计算分离架构,提供极致弹性、毫秒级延迟的HTAP能力。具备高可用、高可靠和弹性扩展特性,支持单机、存储计算分离和X-Paxos三节点等多种部署形态。通过Docker可快速部署实例,包括单节点、一主一备和HTAP(一主两备)实例。此外,文章还介绍了在ECS上使用ESSD云盘搭建PolarDB-PG的详细步骤,适合开发和测试环境。
223743 22
|
7月前
|
存储 NoSQL 关系型数据库
MongoDB非关系型数据库实战
【5月更文挑战第6天】MongoDB,流行的NoSQL数据库,以其灵活的数据模型和高性能备受青睐。本文介绍了MongoDB的基础,包括文档型数据库特性、安装配置、数据操作。通过电商订单管理的实战案例,展示了MongoDB在处理复杂数据结构和大规模数据时的优势,适用于电商、游戏、视频直播等场景。MongoDB的索引、全文搜索和地理空间功能进一步增强了其实用性。注意性能优化和扩展性以确保系统稳定性和可靠性。
下一篇
DataWorks