首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MongoDB 备份恢复

MongoDB 备份恢复

作者头像
JiekeXu之路
修改于 2022-07-20 08:14:56
修改于 2022-07-20 08:14:56
2.1K00
代码可运行
举报
文章被收录于专栏:JiekeXu之路JiekeXu之路
运行总次数:0
代码可运行

作者 | JiekeXu

大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来聊聊MongoDB 备份恢复

去年中旬安装过 MongoDB,没有怎么实操,本次将备份相关的操作做一个总结,后续有用到的地方可以回来查看,就比较方便了,有需要的小伙伴也可以收藏一波哦!来看一眼本月 MongoDB 在 DB-Engines 排行榜上霸榜第五依旧不变,如下所示,然后进入今天的正题吧。

MongoDB 在 bin 目录下提供了一系列有用的工具,这些工具提供了 MongoDB 在运维管理上 的方便。

工具

描述

mongosniff

mongodb监测工具,作用类似于 tcpdump

mongodump

MongoDB数据备份工具

mongoimport

Mongodb数据导入工具

mongoexport

Mongodb数据导出工具

bsondump

将 bson 格式的文件转储为 json 格式的数据

mongorestore

MongoDB数据恢复工具

mongod

MongoDB服务启动工具

mongostat

mongodb自带的状态检测工具

mongofiles

GridFS 管理工具,可实现二制文件的存取

mongooplog

mongotop

跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据

mongos

分片路由,如果使用了 sharding 功能,则应用程序连接的是 mongos 而不是 mongod

mongo

客户端命令行工具,其实也是一个 js 解释器,支持 js 语法

MongoDB 备份恢复主要有以下两种组合工具:mongodump 和 mongorestore、mongoexport 和 mongoimport

1、mongodump 和 mongorestore

这两种工具在 MongoDB 4.4 以下随着数据库服务一起安装,不需要单独安装,但从 MongoDB 4.4 版本开始,mongodump 现在与 MongoDB Server 分开发布,并使用自己的版本控制,初始版本为 100.0.0。 mongodump 从 MongoDB 数据库中读取数据并创建 BSON 文件,mongorestore 工具可以使用这些文件来还原 MongoDB 数据库。mongodump 和 mongorestore 是用于备份和恢复小型 MongoDB 的简单而高效的工具,但不适合捕获大型系统的备份。 mongodump 和 mongorestore 针对正在运行的 mongod 进程运行,并且可以直接操作底层数据文件。默认情况下,mongodump 不捕获 local 本地数据库的内容。mongodump 仅捕获数据库中的文档。生成的备份是节省空间的,但 mongorestore 或 mongod 必须在还原数据后重新生成索引,故不会备份索引。 当连接到 MongoDB 实例时,mongodump 可能会对 mongod 性能产生负面影响。如果数据大于系统内存,则查询会将工作集从内存中推出,从而导致页面错误。应用程序可以继续修改数据,而 mongodump 会捕获输出。对于副本集,mongodump 提供了 --oplog 选项,以在其输出 oplog 条目中包含 mongodump 操作期间发生的条目。这允许相应的 mongorestore 操作重播捕获的 oplog。要恢复使用 --oplog 创建的备份,请将 mongorestore 与 --oplogReplay 选项结合使用。

1.1、 mongodump 常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--host <hostname><:port>, -h <hostname><:port>  # 指定备份的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017

--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--db <database>, -d <database> # 指定备份的数据库,未指定的话,备份所有的数据库,但不包含local库
--collection <collection>, -c <collection> # 指定备份的集合,未指定则备份指定库中的所有集合。
--query <json>, -q <json>  # 指定 json 作为查询条件。来备份我们过滤后的数据。
--queryFile <path>  # 指定 json 文档路径,以该文档的内容作为查询条件,来备份我们过滤后的数据。
--quit # 通过抑制 MongoDB的复制,连接等活动,来实现备份。
--gzip  # 开启压缩,3.2版本后可以使用,输出为文件的话会带有后缀.gz
--out <path>, -o <path>  # 输出的目录路径

--repir # 修复数据时使用 下面有详细介绍
--oplog # mongodump 会将 mongodump 执行期间的 oplog 日志 输出到文件 oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。
--archive <file> # 输出到单个存档文件或者是直接输出。
--dumpDbUsersAndRoles # 只有在 使用 --db 时才适用,备份数据库的包含的用户和角色。
--excludeCollection string # 排除指定的集合,如果要排除多个,使用多个--excludeCollection 
--numParallelCollections int, -j int # 并行导出的集合数,默认为4

--ssl  # 指定 TLS/SSL 协议
--sslCAFile filename # 指定认证文件名
--sslPEMKeyFile <filename>
--sslPEMKeyPassword <value>
--sslCRLFile <filename>
--sslAllowInvalidCertificates
--sslAllowInvalidHostnames
--sslFIPSMode

1.2、导出示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
全库备份
mkdir /mongodb/backup
mongodump  -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup
备份world库
$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -o /mongodb/backup/
备份oldboy库下的log集合
$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy -c log -o /mongodb/backup/
压缩备份
$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldguo -o /mongodb/backup/ --gzip
 mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -o /mongodb/backup/ --gzip
$ mongodump   -uroot -proot123 --port 27017 --authenticationDatabase admin -d app -c vast -o /mongodb/backup/ --gzip

复制集全库压缩备份
$mongodump --host jiektRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017  -uroot -p 'rootroot'  --authenticationDatabase admin -o /home/mongo/dmp --gzip

1.3、mongorestore 常用参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--help # 查看帮助
--quiet # 通过抑制 MongoDB的复制,连接等活动,来实现数据恢复。

--host <hostname><:port>, -h <hostname><:port>  # 指定恢复的主机ip和端口号,默认值localhost:27017
--port # 指定端口号 默认27017

--username <username>, -u <username> # 指定用户名
--password <password>, -p <password> # 指定密码
--authenticationDatabase <dbname> # 指定认证的数据库
--authenticationMechanism <name> # 指定认证的算法 ,默认值 SCRAM-SHA-1
--objcheck # 开启验证,验证还原操作,确保没有无效的文档插入数据库。会有较小的性能影响
--oplogReplay # 恢复备份数据并将 mongodump 执行期间的操作(记录在导出的日志)恢复。
--oplogLimit  # 指定恢复
--oplogFile # 指定 Oplog 路径
--keepIndexVersion # 阻止mongorestore在还原过程中将索引升级到最新版本。
--restoreDbUsersAndRoles # 还原指定的数据库用户和角色。
--maintainInsertionOrder # 默认值为False,如果为 True,mongorestore 将按照输入源的文档顺序插入,否则是 随机执行插入。
--numParallelCollections int, -j int # 指定并行恢复的集合数。
--numInsertionWorkersPerCollection int # 默认值为 1,指定每个集合恢复的并发数,大数据量导入增加该值可提高 恢复速度。
--gzip # 从压缩文档中 恢复。
--archive # 从归档文件中恢复。
--dir # 指定还原数据储存目录。

1.4 恢复示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
恢复world库
$ mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world1  /mongodb/backup/world
恢复oldguo库下的t1集合
[mongod@db03 oldboy]$ mongorestore   -uroot -proot123 --port 27017 --authenticationDatabase admin -d world -c t1  --gzip  /mongodb/backup.bak/oldboy/log1.bson.gz 
drop表示恢复的时候把之前的集合drop掉(危险)
$ mongorestore  -uroot -proot123 --port 27017 --authenticationDatabase admin -d oldboy --drop  /mongodb/backup/oldboy

副本集备份恢复集合
mongodump   --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017 -uroot -p'rootroot' --authenticationDatabase admin -d jieke-biz-credit -c CreditDocDatumDirectTemp -o /home/mongo/mongodump
mongorestore   --host jiekeRS/192.168.75.89:37017,192.168.75.89:37017,192.168.75.89:37017 -uroot -p'rootroot' --authenticationDatabase admin -d jieke_mps_certificate -c CreditDocDatumDirectTemp    /home/mongo/dmp/jieke-biz-credit/CreditDocDatumDirectTemp.bson

注意:默认情况下 mongodump 不获取 local 数据库里面的内容 mongodump 仅备份数据库中的文档,不备份索引,所以我们还原后,需要重新生成索引。 --oplog # mongodump 会将 mongodump 执行期间的 oplog 日志 输出到文件 oplog.bson,这就意味着从备份开始到备份结束的数据操作我们都可以记录下来。

2、mongoexport 和 mongoimport

2.1、mongoexport

mongoexport 是一个命令行工具,可对存储在MongoDB实例中的数据进行JSON或CSV导出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--常用参数
mongoexport --help
Export MongoDB data to CSV, TSV or JSON files.

options:
  --help                    produce help message
  -v [ --verbose ]          be more verbose (include multiple times for more 
                            verbosity e.g. -vvvvv)
  --version                 print the program's version and exit
  -h [ --host ] arg         mongo host to connect to ( <set name>/s1,s2 for 
                            sets)
  --port arg                server port. Can also use --host hostname:port
  --ipv6                    enable IPv6 support (disabled by default)
  -u [ --username ] arg     username
  -p [ --password ] arg     password
  --dbpath arg              directly access mongod database files in the given 
                            path, instead of connecting to a mongod  server - 
                            needs to lock the data directory, so cannot be used
                            if a mongod is currently accessing the same path
  --directoryperdb          if dbpath specified, each db is in a separate 
                            directory
  --journal                 enable journaling
  -d [ --db ] arg           database to use
  -c [ --collection ] arg   collection to use (some commands)
  -f [ --fields ] arg       comma separated list of field names e.g. -f 
                            name,age
  --fieldFile arg           file with fields names - 1 per line
  -q [ --query ] arg        query filter, as a JSON string
  --csv                     export to csv instead of json
  -o [ --out ] arg          output file; if not specified, stdout is used
  --jsonArray               output to a json array rather than one object per 
                            line
  -k [ --slaveOk ] arg (=1) use secondaries for export if available, default 
                            true
              
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件

2.2 、mongoexport 示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--连接到副本集
要连接到副本集以导出其数据,您可以:
指定副本集名称和成员:--uri connection string
mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName" --collection=events --out=events.json [additional options]
如果使用,则将数据库指定为字符串的一部分。您不能将命令行选项与一起使用。
--uri connection string--db--uri connection string

在导出中指定副本集名称和成员--host:
mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com" --collection=events --db=reporting --out=events.json [additional options]
默认情况下,mongoexport从副本集的主数据库读取。要覆盖默认值,可以指定读取首选项:

您可以在 --uri connection string

mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName&readPreference=secondary" --collection=events --out=events.json [additional options]
如果指定读取的首选项标签,请包括以下 readPreferenceTags选项:

mongoexport --uri="mongodb://mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017/reporting?replicaSet=myReplicaSetName&readPreference=secondary&readPreferenceTags=region:east" --collection=events --out=events.json [additional options]
如果使用,则将数据库指定为字符串的一部分。您不能将命令行选项与一起使用。--uri connection string--db--uri connection string

您可以使用--readPreference命令行选项指定读取首选项。如果仅指定读取首选项模式,则命令行选项采用字符串:

mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference=secondary --collection=events --db=reporting --out=events.json [additional options]
或者,命令行选项可以使用带引号的文档 来指定模式,可选的读取首选项标签集和可选的 maxStalenessSeconds:'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds:<num>}'

mongoexport --host="myReplicaSetName/mongodb0.example.com:27017,mongodb1.example.com:27017,mongodb2.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' --collection=events --db=reporting --out=events.json [additional options]
有关可用选项的更多信息,请参阅选项。

连接到分片集群
要连接到分片群集以导出其数据,您可以:

在中指定mongos实例 的主机名--uri connection string

mongoexport --uri="mongodb://mongos0.example.com:27017/reporting" --collection=events --out=events.json [additional options]
如果使用,则将数据库指定为字符串的一部分。您不能将命令行选项与一起使用。--uri connection string--db--uri connection string

在中指定mongos实例的主机名和端口--host

mongoexport --host="mongos0.example.com:27017" --collection=events --db=reporting --out=events.json[additional options]
默认情况下,mongoexport从分片副本集的主数据库读取。要覆盖默认值,可以指定读取首选项:

您可以在 --uri connection string

mongoexport --uri="mongodb://mongos0.example.com:27017/reporting?readPreference=secondary" --collection=events --out=events.json [additional options]
如果指定读取的首选项标签,请包括以下 readPreferenceTags选项:

mongoexport --uri="mongodb://mongos0.example.com:27017/reporting?readPreference=secondary&readPreferenceTags=region:east" --collection=events --out=events.json [additional options]
如果使用,则将数据库指定为字符串的一部分。您不能将命令行选项与一起使用。--uri connection string--db--uri connection string
您可以使用--readPreference命令行选项指定读取首 选项。如果仅指定读取首选项模式,则命令行选项采用字符串:

mongoexport --host="mongos0.example.com:27017" --readPreference=secondary --collection=events --db=reporting --out=events.json [additional options]
或者,命令行选项可以使用带引号的文档 来指定模式,可选的读取首选项标签集和可选的 maxStalenessSeconds:'{ mode: <mode>, tagSets: [ <tag1>, ... ], maxStalenessSeconds:<num>}'
mongoexport --host="mongos0.example.com:27017" --readPreference='{mode: "secondary", tagSets: [ { "region": "east" } ]}' --collection=events --db=reporting --out=events.json [additional options]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
副本集示例
mongoexport --host jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017 -u root -prootroot --authenticationDatabase admin -d jiekexu-message -c XMessageSms --type csv -q '' -f "_id,fkPublishMessageTaskData,fkTemplate,mobile,renderedContent,sendTime,templateId,ipSender" --out XMessageSms.csv
mongoexport --host jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017 -u root -prootroot --authenticationDatabase admin -d jiekexu-message -c XMessageTemplateSms --type csv -q '' -f "_id,contentTemplate,templateId,renderedContent,sendChannel" --out XMessageTemplateSms.csv

mongoexport --host jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017 -u root -prootroot --authenticationDatabase admin -d jiekexu-message -c XMessageSys --type csv -q '' -f "_id,fkPublishMessageTaskData,fkTemplate,renderedContent,sendTime" --out XMessageSys.csv
mongoexport --host jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017 -u root -prootroot --authenticationDatabase admin -d jiekexu-message -c XMessageTemplateSys --type csv -q '' -f "_id,contentTemplate,titleTemplate,renderedContent" --out XMessageTemplateSys.csv

2.3、mongoimport

Mongodb 中的 mongoimport 工具可以把一个特定格式文件中的内容导入到指定的 collection 中。该工具可以导入 JSON 格式数据,也可以导入 CSV 格式数据。参数使用如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mongoimport --help
options:
  --help                  produce help message
  -v [ --verbose ]        be more verbose (include multiple times for more 
                          verbosity e.g. -vvvvv)
  --version               print the program's version and exit
  -h [ --host ] arg       mongo host to connect to ( <set name>/s1,s2 for sets)
  --port arg              server port. Can also use --host hostname:port
  --ipv6                  enable IPv6 support (disabled by default)
  -u [ --username ] arg   username
  -p [ --password ] arg   password
  --dbpath arg            directly access mongod database files in the given 
                          path, instead of connecting to a mongod  server - 
                          needs to lock the data directory, so cannot be used 
                          if a mongod is currently accessing the same path
  --directoryperdb        if dbpath specified, each db is in a separate 
                          directory
  --journal               enable journaling
  -d [ --db ] arg         database to use
  -c [ --collection ] arg collection to use (some commands)
  -f [ --fields ] arg     comma separated list of field names e.g. -f name,age
  --fieldFile arg         file with fields names - 1 per line
  --ignoreBlanks          if given, empty fields in csv and tsv will be ignored
  --type arg              type of file to import.  default: json (json,csv,tsv)
  --file arg              file to import from; if not specified stdin is used
  --drop                  drop collection first 
  --headerline            CSV,TSV only - use first line as headers
  --upsert                insert or update objects that already exist
  --upsertFields arg      comma-separated fields for the query part of the 
                          upsert. You should make sure this is indexed
  --stopOnError           stop importing at first error rather than continuing
  --jsonArray             load a json array, not one item per line. Currently 
                          limited to 4MB.
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字
-f:指明要导入那些列

2.4 mongoimport 导入示例

因生产环境使用的是一主两从的副本集数据库,数据库版本为 3.4.20 版本,这些工具不需要单独安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
三节点副本集导入示例
mongoimport --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017 -uroot -p 'rootroot' --authenticationDatabase admin -d jiekexu -c XMessageSms --type csv --fields "_id,fkPublishMessageTaskData,fkTemplate,mobile,renderedContent,sendTime,templateId,ipSender" --file ./XMessageSms.csv
mongoimport --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017 -uroot -p 'rootroot' --authenticationDatabase admin -d jiekexu -c XMessageTemplateSms --type csv --fields "_id,contentTemplate,templateId,renderedContent,sendChannel" --file ./XMessageTemplateSms.csv

mongoimport --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017 -uroot -p 'rootroot' --authenticationDatabase admin -d jiekexu -c XMessageSys --type csv --fields "_id,fkPublishMessageTaskData,fkTemplate,renderedContent,sendTime" --file ./XMessageSys.csv
mongoimport --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017 -uroot -p 'rootroot' --authenticationDatabase admin -d jiekexu -c XMessageTemplateSys  --type csv --fields  "_id,contentTemplate,titleTemplate,renderedContent" --file ./XMessageTemplateSys.csv

3、所需的访问权限

mongodumpmongorestoremongoexportmongoimport 需要对目标数据库的读取访问权限。确保连接用户至少具有read 目标数据库上的角色。当连接到mongodmongos强制执行 身份验证时,请确保根据配置的身份验证机制使用必需的安全性参数 。

4 基本常用命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
数据库连接示例
mongo  192.168.75.96:37018 -u root -p 'rootroot' --authenticationDatabase admin

mongo --host 192.168.75.96  -uroot -p'rootroot'  --port 37018 --authenticationDatabase admin

mongo --host jiekeRS/192.168.75.30:37017,192.168.75.31:37017,192.168.75.32:37017  -uroot -p 'rootroot'  --authenticationDatabase admin

$ mongo --host jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017 -u root -proot123 --authenticationDatabase admin
MongoDB shell version v3.4.20
connecting to: mongodb://192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017/?replicaSet=jiekeRS
2022-03-31T14:17:35.591+0800 I NETWORK  [thread1] Starting new replica set monitor for jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017
2022-03-31T14:17:35.591+0800 I NETWORK  [thread1] Successfully connected to 192.168.75.76:37017 (1 connections now open to 192.168.75.76:37017 with a 5 second timeout)
2022-03-31T14:17:35.592+0800 I NETWORK  [ReplicaSetMonitor-TaskExecutor-0] Successfully connected to 192.168.75.78:37017 (1 connections now open to 192.168.75.78:37017 with a 5 second timeout)
2022-03-31T14:17:35.592+0800 I NETWORK  [thread1] Successfully connected to 192.168.75.77:37017 (1 connections now open to 192.168.75.77:37017 with a 5 second timeout)
MongoDB server version: 3.4.20
jiekeRS:PRIMARY> 

--查看数据库
show databases; 
show dbs;
db.adminCommand({listDatabases:1});

> show databases;
admin                      0.000GB
local                      0.000GB
jieke-api-partner          3.618GB
jieke-api-partner-gateway  0.005GB
jieke-bigdata-server       0.001GB
jieke-biz-ci               0.001GB
jieke-biz-voucher          0.001GB
jieke-message-server       0.001GB

--查看用户
use admin;
db.system.users.find().pretty();
-----
use admin
show users

--创建用户
use admin;
db.createUser(
{
 user: "xxx",
 pwd: "xxx",
 roles: [{role: "readWrite", db: "peper_test"}]
 }
)

--常用命令
db.version();  查看版本号
rs.config();   查看当前复制配直
rs.status();   获取状态 self 表示执行 rs.status 命令的节点 , stateStr 表示状态。
db.isMaster(); :查看主库信息,主库查看 ismaster : true 或者 primary
--查看用户权限
db.getUser('debezium',{showPrivileges:true})

db.updateUser("bjsxt",{roles : [{"role" : "userAdminAnyDatabase","db" : "admin"},{"role" : "dbAdminAnyDatabase","db" : "admin"}]})
db.updateUser("jiekexu",{roles : [{"role" : "superRole","db" : "admin"}]})
db.grantRolesToUser("jiekexu", [ { role: "superRole", db: "admin" } ])
db.dropUser('jiekexu')

--铲除数据库            
db.dropDatabase() 即可删除数据库
               
mongo查看连接数
> db.serverStatus().connections;
{ "current" : 506, "available" : 50694, "totalCreated" : 11187616 }

5、备份脚本

5.1、mongodump 备份脚本分享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat backup_full.sh
#!/bin/bash

echo ""
START_TIME=`date`
echo "############## full backup start at $START_TIME ##############"
echo ""

# Set env
source /home/mongo/.bash_profile
which mongodump

# Database Info
DB_USER="root"
DB_PASS="root123"
RS_URI="jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017"

# Databases to backup
# DB_NAME=("db1" "db2" "db3")

# Others
#BAK_BASE="/nfs/mongo_bak"
BAK_BASE="/arch"
DATE=`date +%F`
BAK_DIR=$BAK_BASE/$DATE

# Create Directory
mkdir $BAK_DIR

# Full Backup
mongodump --host $RS_URI -u $DB_USER -p $DB_PASS --authenticationDatabase admin --oplog -o $BAK_DIR --gzip

# TODO
#for var in ${DB_NAME[@]};
#do
#  mongodump --host jiekeRS/Cent1:27017,Cent2:27017,Cent3:27017 -u root -p root --authenticationDatabase admin --oplog  -o /mongobak/full_gzip --gzip
#done

echo ""
END_TIME=`date`
echo "############## full backup end at $END_TIME ##############"
echo ""

echo ""
START_TIME=`date`
echo "############## clean up start at $START_TIME ##############"
echo ""

#find /nfs/mongo_bak/ -maxdepth 1 -type d -mtime +4
#find /nfs/mongo_bak/ -maxdepth 1 -type d -mtime +4 -exec rm -rf {} \;
#find /nfs/mongo_bak/mongo_archive/ -maxdepth 1 -type d -mtime +7
#find /nfs/mongo_bak/mongo_archive/ -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;

find /arch/ -maxdepth 1 -type d -mtime +0
find /arch/ -maxdepth 1 -type d -mtime +0 -exec rm -rf {} \;
find /arch/mongo_archive/ -maxdepth 1 -type d -mtime +6
find /arch/mongo_archive/ -maxdepth 1 -type d -mtime +6 -exec rm -rf {} \;
echo ""
END_TIME=`date`
echo "############## clean up end at $END_TIME ##############"
echo ""

crontab 计划任务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ crontab -l 
#10 0 * * * /home/mongo/scripts/cleanup.sh >> /home/mongo/scripts/cleanup.log 2>&1
30 0 * * * /home/mongo/scripts/backup_full.sh >> /home/mongo/scripts/backup_full.log 2>&1
30 23 * * * /home/mongo/scripts/archive_partnerInteractiveLog.sh >> /home/mongo/scripts/archive_partnerInteractiveLog.log 2>&1

导出日志及删除前一天备份,显示日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
############## full backup start at Thu Mar 31 00:30:01 CST 2022 ##############

/opt/mongodb-linux-x86_64-rhel70-3.4.20/bin/mongodump
2022-03-31T00:30:01.940+0800  writing admin.system.users to 
2022-03-31T00:30:01.942+0800  done dumping admin.system.users (13 documents)
2022-03-31T00:30:01.942+0800  writing admin.system.roles to 
2022-03-31T00:30:01.944+0800  done dumping admin.system.roles (2 documents)
2022-03-31T00:30:01.944+0800  writing admin.system.version to 
2022-03-31T00:30:01.945+0800  done dumping admin.system.version (2 documents)
2022-03-31T00:30:01.947+0800  writing jieke-api-partner-hub.aphMessageBO to 
2022-03-31T00:30:01.947+0800  writing jieke-biz-price.ForecasterBillExtension to 
2022-03-31T00:30:01.947+0800  writing jieke-message-server.XPublishMessageTaskData to 
2022-03-31T00:30:01.947+0800  writing jieke-bigdata-server.xyzgcorp to 
2022-03-31T00:30:04.635+0800  [........................]            jieke-api-partner-hub.aphMessageBO  18756/20650620  (0.1%)
2022-03-31T00:30:04.635+0800  [........................]       jieke-biz-price.ForecasterBillExtension   3150/20023725  (0.0%)
2022-03-31T00:30:04.635+0800  [........................]                 jieke-bigdata-server.xyzgcorp   4005/13938341  (0.0%)
2022-03-31T00:30:04.635+0800  [........................]  jieke-server.XPublishMessageTaskData  31322/18455243  (0.2%)

===================================================

2022-03-31T03:22:20.760+0800  done dumping jieke-biz-price.ForecasterBillExtension (20024155 documents)
2022-03-31T03:22:20.764+0800  writing captured oplog to 
2022-03-31T03:22:28.635+0800  [#####################...]  .oplog  52365/57903  (90.4%)
2022-03-31T03:22:28.950+0800  [########################]  .oplog  57903/57903  (100.0%)
2022-03-31T03:22:28.950+0800    dumped 57903 oplog entries

############## full backup end at Thu Mar 31 03:22:28 CST 2022 ##############


############## clean up start at Thu Mar 31 03:22:28 CST 2022 ##############

/arch/2022-03-30
/arch/mongo_archive/2022-03-23

############## clean up end at Thu Mar 31 03:22:29 CST 2022 ##############

5.2、mongoexport 备份集合脚本分享

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat archive_partnerInteractiveLog.sh
#!/bin/bash
echo ""
START_TIME=`date`
echo "############## backup start at $START_TIME ##############"
echo ""

# Set env
source /home/mongo/.bash_profile
which mongoexport
# Database Info
DB_USER="jiekexu_app"
DB_PASS="mjiekeyu#123"
CONN_STR="jiekeRS/192.168.75.76:37017,192.168.75.77:37017,192.168.75.78:37017"
#BAK_BASE="/nfs/mongo_bak/mongo_archive"
BAK_BASE="/arch/mongo_archive"
DATE=`date +%F`
EXPIRE_DAY=`date +%F -d "-1 days"`

DB_NAME="jiekexu-api-partner"
COL_NAME="partnerInteractiveLog"
mongoexport --host $CONN_STR -u $DB_USER -p $DB_PASS --authenticationDatabase admin -d $DB_NAME -c $COL_NAME -o $BAK_BASE/$DATE/$DB_NAME/$COL_NAME.json --type json 
if [ $? -ne 0 ]; then
    echo "$DB_NAME.$COL_NAME export failed"
else
    JS1='db.getSiblingDB("'
    JS2='").'
    JS3='.deleteMany({$or:[{"requestDate":{$lt:new Date("'
    JS4='")}},{"responesDate":{$lt:new Date("'
    JS5='")}}]})'
    JS=$JS1$DB_NAME$JS2$COL_NAME$JS3$EXPIRE_DAY$JS4$EXPIRE_DAY$JS5
    echo $JS
    mongo --host $CONN_STR -u $DB_USER -p $DB_PASS --authenticationDatabase admin --eval "$JS"
    echo "$DB_NAME.$COL_NAME export succeed"
fi

DB_NAME="jiekexu-erp-dfnissan"
COL_NAME="partnerInteractiveLog"
mongoexport --host $CONN_STR -u $DB_USER -p $DB_PASS --authenticationDatabase admin -d $DB_NAME -c $COL_NAME -o $BAK_BASE/$DATE/$DB_NAME/$COL_NAME.json --type json
if [ $? -ne 0 ]; then
    echo "$DB_NAME.$COL_NAME export failed"
else
    JS1='db.getSiblingDB("'
    JS2='").'
    JS3='.deleteMany({"requestDate":{$lt:new Date("'
    JS4='")}})'
    JS=$JS1$DB_NAME$JS2$COL_NAME$JS3$EXPIRE_DAY$JS4
    echo $JS
    mongo --host $CONN_STR -u $DB_USER -p $DB_PASS --authenticationDatabase admin --eval "$JS"
    echo "$DB_NAME.$COL_NAME export succeed"
fi

chmod 755 -R $BAK_BASE/$DATE

echo ""
END_TIME=`date`
echo "############## backup end at $END_TIME ##############"
echo ""

参考链接

https://www.mongodb.org.cn/manual/197.html

https://mongodb.net.cn/manual/reference/program/mongoexport/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JiekeXu之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最贵新股没破发,此前弃购7.8个亿,背靠华为的这家半导体公司这么香?
4月22日,苏州纳芯微电子股份有限公司(以下简称“纳芯微”,股票代码:688052)成功于上交所科创板上市,纳芯微本次发行价为230元/股,创造了2022年以来A股新股发行最高价格,也成为A股半导体行业新股发行价历史最高价,公司实际募得资金58.11亿元,超募6.75倍。
数据猿
2022/05/19
4160
最贵新股没破发,此前弃购7.8个亿,背靠华为的这家半导体公司这么香?
今年最大IPO!华虹公司明日申购:拟募资212亿元!
根据华虹公司的公告显示,此次华虹公司公开发行股票数量约为4.08亿股,发行后公司总股本约为17.16亿股,发行价为52元/股,预计募集资金总额为212.03亿元。而华虹公司原计划募资金额约180亿元,最终募资总额实现大幅超募。
芯智讯
2023/08/09
2130
今年最大IPO!华虹公司明日申购:拟募资212亿元!
中国芯片差在哪?这篇讲全了
在半导体这个领域,中国需要挑战的是,西方上百年积累起来的工业体系。中国半导体一直是在冒着敌人的炮火匍匐前进,如今,敌人的炮火越来越凶猛。围追堵截中,谁让我“芯”痛?
钱塘数据
2018/12/29
1.4K0
华为上半年净利暴涨218%!得益于出售荣耀和超聚变的尾款支付及股权投资收益?
今年8月11日,华为公布了2023年上半年经营业绩,实现销售收入3109亿元人民币,同比增长3.1%,净利润率为15.0%,同比提升10个百分点。8月30日,华为在上清所官网披露了2023年半年报报表,曝光了更多细节。
芯智讯
2023/09/08
5730
华为上半年净利暴涨218%!得益于出售荣耀和超聚变的尾款支付及股权投资收益?
2022年半导体材料行业研究报告
半导体材料是一类具备半导体性能(导电能力介于导体与绝缘体之间,电阻率约在1mΩ·cm~1GΩ·cm范围内),一般情况下导电率随温度的升高而提高。半导体材料具有热敏性、光敏性、掺杂性等特点,是用于晶圆制造和后道封装的重要材料,被广泛应用于汽车、照明、家用电器、消费电子、信息通讯等领域的集成电路或各类半导体器件中。
资产信息网
2022/05/05
1.1K0
2022年半导体材料行业研究报告
造芯热潮下的冷思考
伴随着智能手机革命而兴起的移动互联网时代,为我国经济社会发展注入了巨大的活力,同时也使得全国上下对互联网、半导体、集成电路(芯片)等产业的重视程度不断提高。而集成电路是半导体产业的重要组成部分,也是我国半导体产业发展最受关注的焦点。
刘旷
2020/11/03
4230
投资芯片和卖肥皂差不多?那是因为不懂芯片产业! | 镁客网深度
芯片产业的特性决定了它的门槛较高,这也决定了投资公司的门槛。 74岁的尹志尧看起来依然年轻。 这位先后在硅谷英特尔、LAM、应用材料三家公司工作逾20年,继而回国创业的古稀老人依然奋战在研发一线。 2
镁客网
2018/06/20
5793
2021年芯片行业发展研究报告
芯片,有广义和狭义之分,广义芯片包括了集成电路、传感器、分立器件、光电器件产品,狭义芯片单指集成电路。集成电路(Integrated Circuit, IC)或称微电路(Microcircuit)、微芯片(Microchip)、晶片/芯片(Chip)在电子学中是一种将电路(主要包括半导体设备,也包括被动组件等)小型化的方式,并时常制造在半导体晶圆表面上。
资产信息网
2022/04/13
1.9K0
2021年芯片行业发展研究报告
传日系光刻胶大厂断供,国产光刻胶概念股集体大涨!
3月8日消息,今日业内传出消息称,某日本某光刻胶大厂已经执行美国“实体清单”的限制要求,对中国大陆某存储晶圆厂断供了KrF光刻胶。
芯智讯
2023/03/24
6630
传日系光刻胶大厂断供,国产光刻胶概念股集体大涨!
IC是什么
很多人知道IT男,码农。但是不知道IC是啥,IC就是做集成电路芯片的,蓦然回首本翁还是学IC出身的,IC的上一级学科叫微电子学,估计更多人不知道。以前上学的时候就好奇为啥中国的半导体行业牛人很多,比如编写半导体教科书的人很多,但是就是没啥产业,全是国外的。好一点的科研设备都是国外的,用国内的发不了论文。芯片重点缺失落后在两个方面:
用户2760455
2022/06/08
1.2K0
IC是什么
半导体成新资本洼地,国产化浪潮势不可挡
近日,中芯国际成功登陆科创板。按照中芯国际发行价27.46元/股,发行16.86亿股计算,本次的募资金额是462.87亿元,比此前招股书规划的200亿元高出一倍多。
刘旷
2020/07/10
4220
又一家晶圆代工企业IPO,成立4年全球排名第15,盈利要等到2026年
近两年半导体行业掀起上市潮,数百家半导体公司接连登陆资本市场。作为承接上游IC设计、下游封装测试的晶圆代工厂们也站在时代的潮头,继中芯国际A股上市后,又有多家晶圆代工企业递交了IPO申请。
数据猿
2023/03/03
8170
又一家晶圆代工企业IPO,成立4年全球排名第15,盈利要等到2026年
总投资30亿元,张汝京再建光罩厂!
8月19日上午,南湖高新区微电子产业又添一员“猛将”——由中芯国际创始人、青岛恩芯创始人张汝京主导的光罩材料产业链项目签约仪式在浙江嘉兴科技城(南湖高新区)智立方举行。
芯智讯
2022/08/22
6410
总投资30亿元,张汝京再建光罩厂!
中芯国际上市暴涨245%,原来芯片制造才是真正的万金油生意
开盘伊始,中芯国际的股价暴涨到95元,涨幅245.96%,仅仅90分钟就有超360亿元资金成交,成科创板名副其实的“吸金王”。
科技云报道
2022/04/16
5710
中芯国际上市暴涨245%,原来芯片制造才是真正的万金油生意
月产能64.1万片,临港成中国最大晶圆制造基地!
11月23日,由上海临港经济发展(集团)有限公司主办,临港科技、ASPENCORE承办的“2023中国临港国际半导体大会”在上海临港正式召开。在会议上,临港新片区党工委副书记吴晓华、临港集团党委书兼总裁翁恺宁、临港新片区投资促进服务中心主任顾长石等相关领导详细介绍了临港的集成电路产业的发展情况。
芯智讯
2023/11/24
1K0
月产能64.1万片,临港成中国最大晶圆制造基地!
唠唠芯片设计软件EDA,为啥美国禁止华为用美国人的EDA,锁喉
还记得研究生时期,第一次玩全定制芯片版图设计,一个搞物理学的去研究芯片设计,也是摸着石头过河,熬夜学习Cadence,完成作业。没想到最近EDA也要进入大家挣的焦点了。
用户2760455
2022/06/08
1.3K0
唠唠芯片设计软件EDA,为啥美国禁止华为用美国人的EDA,锁喉
日本将限制23项半导体设备出口!对中国半导体产业影响几何?
3月31日消息,据路透社报道,日本政府于当地时间本周五宣布,计划限制23项半导体制造设备的出口。日本政府此举被认为是跟进美国去年10月出台的针对中国的半导体设备出口管制政策。
芯智讯
2023/04/11
1.3K0
日本将限制23项半导体设备出口!对中国半导体产业影响几何?
突破CPU/GPU/FPGA等高端芯片可奖励1000万!反击美方垄断的突围战在深圳打响!
近日,有着“中国硅谷”美誉的深圳发布了《深圳市关于促进半导体与集成电路产业高质量发展的若干措施(征求意见稿)》,传递了怎样的中国芯片打法?
SDNLAB
2022/12/13
6540
突破CPU/GPU/FPGA等高端芯片可奖励1000万!反击美方垄断的突围战在深圳打响!
为配合苹果iPhone订单需求,鸿海宣布明年加倍投资印度制造!
据印度媒体报道称,苹果公司(Apple)供应商鸿海的印度高管于9月18日表示,目标明年在印度雇用的劳工数和投资金额都要增加一倍,显示鸿海配合苹果iPhone订单需求,持续扩张印度制造,并看好当地市场前景。
芯智讯
2023/09/20
1970
为配合苹果iPhone订单需求,鸿海宣布明年加倍投资印度制造!
曾获华为、小米等投资,纵慧芯光VCSEL芯片累计出货量突破1亿颗
8月15日消息,国产VCSEL(垂直腔面发射激光器)厂商纵慧芯光于14日通过官方微信宣布,公司于2023年8月11日完成了总计1亿颗VCSEL芯片的出货,并保持客户现场零失效的记录!这标志着其在VCSEL领域达到了一个新的里程碑。
芯智讯
2023/09/07
3370
曾获华为、小米等投资,纵慧芯光VCSEL芯片累计出货量突破1亿颗
推荐阅读
相关推荐
最贵新股没破发,此前弃购7.8个亿,背靠华为的这家半导体公司这么香?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验