【MongoDB】mongoDB数据迁移
目录
一、MongoDB概述
1.1MongoDB简介
1.2 MongoDB应用场景
二、数据迁移
2.1任务场景
2.2服务器上备份数据
2.3恢复数据库
一、MongoDB概述
1.1MongoDB简介
MongoDB 是一个文档数据库(以 JSON 为数据模型),由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,数据格式是BSON ,一种类似 JSON 的二进制形式的存储格式,简称Binary JSON ,和 JSON 一样支持内嵌的文档对象和数组对象,因此可以存储比较复杂的数据类型。MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。大多数时候 Oracle 和 MySQL 能做的事情, MongoDB 都能做(包括 ACID 事务)。
SQL概念 | MongoDB概念 |
数据库(database) | 数据库(database) |
表(table) | 表(table) |
行(row) | 文档(document) |
列(column) | 字段(field) |
索引(index) | 索引(index) |
主键(primary key) | _id(字段) |
视图(view) | 视图(view) |
表连接(table joins) | 聚合操作($lookup) |
概念释义
- 数据库( database ):最外层的概念,可以理解为逻辑上的名称空间,一个数据库包含多个不同名称的集合。
- 集合( collection ):相当于 SQL 中的表,一个集合可以存放多个不同的文档。
- 文档( document ):一个文档相当于数据表中的一行,由多个不同的字段组成。
- 字段( field ):文档中的一个属性,等同于列( column )。
- 索引( index ):独立的检索式数据结构,与 SQL 概念一致。
- id :每个文档中都拥有一个唯一的 id 字段,相当于 SQL 中的主键( primary key )。
- 视图( view ):可以看作一种虚拟的(非真实存在的)集合,与 SQL 中的视图类似。从 MongoDB
- 聚合操作( $lookup ): MongoDB 用于实现 “ 类似 ” 表连接( tablejoin )的聚合操作符。
1.2 MongoDB应用场景
- 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、 积分 等直接以内嵌文档的形式存储,方便查询、更新;
- 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;
- 社交场景,使用 MongoDB 存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;
- 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;
- 视频直播,使用 MongoDB 存储用户信息、礼物信息等;
- 大数据应用,使用云数据库 MongoDB 作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。
二、数据迁移
2.1任务场景
项目现场因为历史问题,MongoDB数据库部署在windows服务器。现在需要将MongoDB集合从windows服务器迁移到Linux。
方法 | 简要分析说明 |
ETL工具(kettle) | 1、可以创建索引; 2、迁移过程可追溯; 3、集合名称、字段名有开发出错的风险; 4、大集合不适合全量一次性同步,需要分批次增量同步过去; |
mongodump/mongorestore | 1、迁移会保留索引和元数据; 2、适合全量备份迁移; 3、对于大集合导出导入效率较高; 4、会受限于网络速度 |
mongoexport/mongoimport | 1、导出的文件可以是json、csv,可读性较高; 2、适合小数据量迁移 3、不会保留索引和元数据; 4、迁移效率较低; |
compass工具 | 1、导出的文件可以是json、csv,可读性较高; 2、不需要写命令,不需要开发; 3、适合小数据量迁移; 4、不会保留索引和元数据; 5、迁移效率较低; |
结合场景我们是一次性全量的同步,选择了mongodump/mongorestore
mongodump
把数据库内容导出为 BSON 文件mongorestore
把 BSON 文件导入到新环境
2.2服务器上备份数据
连接服务器,我们 直接在目标Linux服务器上 连接 windows 上的monoDB进行数据文件备份。
# 在服务器上备份数据
mongodump \--host 10.11.102.xxx \--port 27017 \--username reid_aio \--password rCg3F4m#rjvehitS \--db ipvacloud_reid \--out ./backup
备份参数释 义:
场景 | 参数组合 | 说明 |
本地数据库 | --db dbname --out /backup | 最基础用法 |
远程数据库 | --host 192.168.1.100 --port 27017 | 指定服务器 |
需要认证 | --username user --password pwd --authenticationDatabase admin | 生产环境常用 |
压缩备份 | --gzip | 节省空间 |
单个文件 | --archive=backup.archive | 方便传输 |
部分数据 | --query '{"status":"active"}' | 只备份活跃数据 |
直接在linux上安装好的mongoDB恢复全部数据库
# 直接在linux上安装好的mongoDB恢复全部数据库
mongorestore ./backup
恢复参数释义
场景 | 参数组合 | 说明 |
基础恢复 | --db dbname /backup/source | 恢复到指定数据库 |
覆盖数据 | --drop | 先删除现有数据 |
模拟运行 | --dryRun | 看看会做什么,不实际执行 |
压缩文件 | --gzip | 处理压缩备份 |
归档文件 | --archive=backup.archive | 从单文件恢复 |
重命名库 | --db new_name /backup/old_name | 恢复时改名 |
https://blog.csdn.net/qq_36435177/article/details/148748145
https://blog.csdn.net/sinat_27933301/article/details/114545425
https://blog.csdn.net/qq_67832732/article/details/135567678