0


MongoDB 备份恢复

2234e61b4aec865f9e81a598d255cd60.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来聊聊MongoDB 备份恢复,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!

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

aaaa438e4e71d4ab47616294715aa4a7.png

MongoDB 在 bin 目录下提供了一系列有用的工具,这些工具提供了 MongoDB 在运维管理上 的方便。
工具描述mongosniffmongodb监测工具,作用类似于 tcpdumpmongodumpMongoDB数据备份工具mongoimportMongodb数据导入工具mongoexportMongodb数据导出工具bsondump将 bson 格式的文件转储为 json 格式的数据mongorestoreMongoDB数据恢复工具mongodMongoDB服务启动工具mongostatmongodb自带的状态检测工具mongofilesGridFS 管理工具,可实现二制文件的存取mongooplogmongotop跟踪一个MongoDB的实例,查看哪些大量的时间花费在读取和写入数据mongos分片路由,如果使用了 sharding 功能,则应用程序连接的是 mongos 而不是 mongodmongo客户端命令行工具,其实也是一个 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 常用参数

--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、导出示例

全库备份
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 常用参数

--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 恢复示例

恢复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导出。

--常用参数
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 示例

--连接到副本集
要连接到副本集以导出其数据,您可以:
指定副本集名称和成员:--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]
副本集示例
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 格式数据。参数使用如下:

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 版本,这些工具不需要单独安装。

三节点副本集导入示例
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、所需的访问权限


mongodump


mongorestore

mongoexport
mongoimport

需要对目标数据库的读取访问权限。确保连接用户至少具有

read

目标数据库上的角色。当连接到

mongod

mongos

强制执行 身份验证时,请确保根据配置的身份验证机制使用必需的安全性参数 。

4 基本常用命令

数据库连接示例
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 jxrtRS/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 备份脚本分享

$ 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 计划任务

$ 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

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

############## 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-message-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 备份集合脚本分享

$ 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="mcsa2jtyu#"
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/

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,你关心谁就分享给谁,一起学习共同进步~~~

❤️ 欢迎关注我的视频号,来一起玩耍吧!!!

————————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————————

9dc4a35aaafc911fe51a54b170431177.gif

Oracle 表碎片检查及整理方案

2021 年公众号历史文章合集整理

2020 年公众号历史文章合集整理

我的 2021 年终总结和 2022 展望

Oracle 查询表空间使用率超慢问题一则

国产数据库|TiDB 5.4 单机快速安装初体验

Oracle ADG 备库停启维护流程及增量恢复

Oracle 19c 使用数据泵如何导入导出 PDB 用户

955fe8ec972be01749c9e13f39241d3d.png

标签: 数据库 linux java

本文转载自: https://blog.csdn.net/JiekeXu/article/details/123887712
版权归原作者 JiekeXu 所有, 如有侵权,请联系我们删除。

“MongoDB 备份恢复”的评论:

还没有评论