恢复副本集备份到本地自建数据库
实例的备份文件仅支持在Linux系统下恢复到本地自建数据库,暂不支持Windows系统。
本文以Linux操作系统为例,介绍如何将已下载的副本集备份文件的数据恢复至自建数据库。关于如何下载备份文件,请参见下载备份文件。
使用须知
- 本地自建MongoDB数据库已安装3.4版本客户端工具。
- 目前仅支持3.4和4.0版本,4.2版本暂不支持通过该方式在本地进行恢复。
- 如果需要完成数据库、集合级别的数据迁移,请参见通过mongodump和mongorestore工具迁移数据。
操作步骤
- 登录自建数据库所在服务器。
假设路径“/path/to/mongo”为执行恢复操作所在路径,路径“/path/to/mongo/data”为备份文件所在路径。
- 恢复前,确保路径“/path/to/mongo/data”为空目录。
cd /path/to/mongo/data/
rm -rf *
- 将已下载的副本集备份文件压缩包复制到“/path/to/mongo/data/”路径下,并解压。
lz4 -d xxx_.tar.gz |tar -xC /path/to/mongo/data/
- 在“/path/to/mongo”文件夹中新建配置文件“mongod.conf”。
touch mongod.conf
- 通过单节点模式启动数据库。
- 修改“mongod.conf”配置文件,使其符合备份启动的配置要求。
systemLog: destination: file path: /path/to/mongo/mongod.log logAppend: true security: authorization: enabled storage: dbPath: /path/to/mongo/data directoryPerDB: true engine: wiredTiger wiredTiger: collectionConfig: {blockCompressor: snappy} engineConfig: {directoryForIndexes: true, journalCompressor: snappy} indexConfig: {prefixCompression: true} net: http: enabled: false port: 27017 bindIp: xxx.xxx.xxx.xxx,xxx.xxx.xxx.xxx unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /path/to/mongo/mongod.pid
bindIp为数据库绑定的连接IP地址。该字段可选,不包含该字段时,默认绑定本地IP地址。
- 指定新建的配置文件“mongod.conf”启动数据库。
/usr/bin/mongod -f /path/to/mongo/mongod.conf
/usr/bin/为已安装MongoDB客户端中mongod文件所在路径。
- 等待启动完成后,可通过服务器的mongo shell登录恢复后的数据库。
mongo --host <DB_HOST> -u <DB_USER> -p <PASSWORD> --authenticationDatabase admin
- DB_HOST是数据库绑定的连接IP地址。
- DB_USER是数据库账号名,默认rwuser。
- PASSWORD是实例进行备份时,数据库账号对应的密码。
- 修改“mongod.conf”配置文件,使其符合备份启动的配置要求。
副本集模式启动数据库
DDS实例的物理备份默认带有原实例的副本集配置。启动时需以单节点模式启动,否则可能无法访问。
如需以副本集模式启动,请先执行5,再执行以下步骤:
- 通过服务器的mongo shell登录恢复后的数据库。
- 移除原有副本集配置。
use local
db.system.replset.remove({})
- 关闭数据库进程服务。
use admin
db.shutdownServer()
- 修改“/path/to/mongo/”目录下的配置文件“mongod.conf”,添加replication相关配置。详细命令用法请参考MongoDB官方文档部署副本集。
- 指定新建的配置文件“mongod.conf”来启动数据库。
/usr/bin/mongod -f /path/to/mongo/mongod.conf
/usr/bin/为已安装MongoDB客户端中mongod文件所在路径。
- 将成员加入副本集并初始化副本集。
此步骤使用 rs.initiate()命令进行操作,详细命令用法请参考MongoDB官方文档rs.initiate()命令介绍。