将MongoDB物理备份文件恢复至自建数据库
您可以通过控制台下载MongoDB实例的物理备份文件。本文介绍如何将MongoDB物理备份中的数据,恢复至本地自建的MongoDB数据库中。
前提条件
- 实例架构为副本集实例。
- 实例未开启TDE功能。
- 实例的存储引擎为WiredTiger或RocksDB。如果实例的存储引擎为TerarkDB ,请使用逻辑备份恢复至自建数据库。
说明 实例的存储引擎为RocksDB时,您需要自行编译安装带有RocksDB存储引擎的MongoDB应用程序。
数据库版本要求
MongoDB实例 | 自建MongoDB数据库 |
---|---|
3.2版本 | 3.2或3.4版本 |
3.4版本 | 3.4版本 |
4.0版本 | 4.0版本 |
4.2版本 | 4.2版本 |
物理备份文件格式说明
物理备份文件格式 | 文件后缀 | 说明 |
---|---|---|
tar压缩包 | .tar.gz | 2019年3月26日之前创建的实例,物理备份文件格式为tar压缩包。 |
xbstream文件包 | _qp.xb | 2019年3月26日及之后创建的实例,物理备份文件格式为xbstream文件包。 |
说明 上述两种格式的文件,对应的解压操作有所不同,详情请参见下载及解压物理备份文件。
演示环境说明
以下演示所用的服务器为阿里云ECS实例,镜像为Ubuntu 16.04(64位),更多详情请参见创建ECS实例。
说明
- 该服务器已安装对应版本的MongoDB,安装方法请参见MongoDB官方文档。
- 该服务器将/path/to/mongo/data作为MongoDB物理恢复操作的数据库所在目录(该目录是空的)。
下载及解压物理备份文件
- 下载MongoDB物理备份文件,您也可以通过
wget
命令下载。 - 将下载的MongoDB物理备份文件复制至/path/to/mongo/data/目录中。
- 对物理备份文件执行解压操作。
- 当下载的物理备份文件后缀为.tar.gz时,例如文件名为hins20190412.tar.gz,请使用下述方法解压。
cd /path/to/mongo/data/ tar xzvf hins20190412.tar.gz
- 当下载的物理备份文件后缀为_qp.xb时,例如文件名为hins20190412_qp.xb,请使用下述方法解压。
- 安装percona-xtrabackup工具。
apt-get update apt install percona-xtrabackup
- 前往QuickLZ网站,下载qpress工具。
- 解压并安装qpress工具。
tar xvf qpress-11-linux-x64.tar chmod 775 qpress cp qpress /usr/bin
- 解压物理备份文件,例如数据库备份文件名为hins20190412_qp.xb。
cd /path/to/mongo/data/ cat hins20190412_qp.xb | xbstream -x -v innobackupex --decompress --remove-original /path/to/mongo/data
- 安装percona-xtrabackup工具。
- 当下载的物理备份文件后缀为.tar.gz时,例如文件名为hins20190412.tar.gz,请使用下述方法解压。
以单节点模式恢复MongoDB物理备份的数据
- 在/path/to/mongo文件夹中新建配置文件mongod.conf。
touch mongod.conf
- 修改mongod.conf配置文件,使得符合启动的配置要求。
根据云数据库MongoDB版的存储引擎选择启动的配置模板,您可以将其复制到mongod.conf文件中。
说明 配置文件设置了启动模式为单节点模式并开启认证功能。- WiredTiger存储引擎
systemLog: destination: file path: /path/to/mongo/mongod.log logAppend: true security: authorization: enabled storage: dbPath: /path/to/mongo/data directoryPerDB: true net: port: 27017 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /path/to/mongo/mongod.pid
说明 云数据库MongoDB默认使用的是WiredTiger存储引擎,并且开启了directoryPerDB选项,因此配置中指定了这个选项。 - RocksDB存储引擎
systemLog: destination: file path: /path/to/mongo/logs/mongod.log logAppend: true security: authorization: enabled storage: dbPath: /path/to/mongo/data engine: rocksdb net: port: 27017 unixDomainSocket: enabled: false processManagement: fork: true pidFilePath: /path/to/mongo/logs/mongod.pid
- WiredTiger存储引擎
- 指定新建的配置文件 mongod.conf 来启动 MongoDB。
/usr/bin/mongod -f /path/to/mongo/mongod.conf
- 等待启动完成后,可通过服务器的 mongo shell 登录 MongoDB 数据库。
mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin
说明:- <username>:该MongoDB实例的数据库账号,默认为root。
- <password>:该数据库账号对应的密码。
副本集模式启动MongoDB数据库
云数据库MongoDB的物理备份默认带有原实例的副本集配置。启动时需以单节点模式启动,否则可能无法访问。
如需以副本集模式启动,需要先以单节点模式恢复MongoDB数据,再按照以下步骤执行:
- 通过服务器的mongo shell登录MongoDB数据库。
- 移除原有副本集配置。
use local db.system.replset.remove({})
- 关闭MongoDB服务。
use admin db.shutdownServer()
- 修改/path/to/mongo/目录下的配置文件mongod.conf,添加replication相关配置。详细命令用法请参见MongoDB官方文档部署副本集。
- 指定新建的配置文件 mongod.conf 来启动 MongoDB。
/usr/bin/mongod -f /path/to/mongo/mongod.conf
- 将成员加入副本集并初始化副本集。
说明 此步骤使用
rs.initiate()
命令进行操作,详细命令用法请参见MongoDB官方文档rs.initiate()命令介绍。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论