阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

上周刚刚恢复msyql的备份,这周继续恢复MongoDB数据库,要求云数据库MongoDB版实例的版本必须对应自建MongoDB数据库的版本。物理备份文件格式【xbstream】,格式文件后缀【_qp.xb】,2019年03月26日及之后创建的实例,物理备份文件格式为xbstream。另外官方特别说明:由于Windows暂未支持解压此文件所需的percona-xtrabackup工具,因此xbstream格式仅限Linux系统中解压使用。

环境说明

本文示例所用的服务器为云ECS实例,镜像为Centos7.6(64位),创建方法请参见创建ECS实例。

ECS服务器已安装对应版本的MongoDB,安装方法请参考李洋博客阿里云RDS MySQL数据库物理备份的xb文件格式恢复到本地数据库的图文教程》的安装步骤。

ECS服务器已对MongoDB配置环境变量,执行命令时无需再输入可执行文件的路径。

/test/mongo/data作为MongoDB物理恢复操作的数据库所在目录。

环境变量

确认 MongoDB 的可执行文件路径,首先检查 MongoDB 的安装位置:

which mongo

# 输出示例:/usr/bin/mongowhich mongod   # 输出示例:/usr/bin/mongod

如果输出路径已经是 /usr/bin(默认路径),则无需配置环境变量,因为这些目录默认在系统的 PATH 中。

如果非默认路径,编辑用户环境变量配置文件:

sudo vi /etc/profile

在文件末尾添加以下内容:

export PATH=$PATH:/<MongoDB服务端路径>/bin

保存文件后,重新加载配置:

source /etc/profile

还原备份数据

把下载好的阿里云备份文件上传到云服务器,比如【/backup】目录下,记住这个路径,一会要用。

执行如下命令,命令执行在/test/mongo/中新建一个data目录,并将刚才上传的MongoDB物理备份文件移动到/test/mongo/data/目录中。

mkdir -p /test/mongo/data && mv /backup/hins14438959_data_20220802043338_qp.xb /test/mongo/data

因为我的数据库的备份文件后缀为_qp.xb,安装percona-xtrabackup工具和qpress软件包。详情请参见李洋博客的《阿里云RDS MySQL数据库物理备份的xb文件格式恢复到本地数据库的图文教程》安装步骤。

解压物理备份文件,例如数据库备份文件名为hins14438959_data_20220802043338_qp.xb。

# 进入文件所在目录。

cd /test/mongo/data/

# 解包。

cat hins14438959_data_20220802043338_qp.xb | xbstream -x -v

解包成功如图,但是解包完成后的格式依然不能直接使用,比如图中的.qp格式。

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

对于 _qp.xb 格式我们继续使用xtrabackup解压物理备份文件。

xtrabackup --decompress --remove-original --target-dir=/test/mongo/data/

注意,xbstream和xtrabackup目录参照李洋博客《阿里云RDS MySQL数据库物理备份的xb文件格式恢复到本地数据库的图文教程》文章的安装方法,然后直接引用目录,不能直接使用。

执行以上命令解压备份文件, 成功如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

然后我们回到目录下刷新,看看是不是所有的qp格式成功转换。

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

目前数据库恢复完成,但是我们还需要将他恢复到数据里,一遍我们去查看源数据是否完成,接下来执行如下命令在/test/mongo文件夹中新建配置文件mongod.conf。

touch /test/mongo/mongod.conf

在命令行中输入

vi /test/mongo/mongod.conf

打开mongod.conf文件,键盘输入i开启编辑模式。

根据云数据库MongoDB版的存储引擎选择启动的配置模板,您可以将其复制到mongod.conf文件中。配置文件设置了启动模式为单节点模式并开启认证功能。

WiredTiger存储引擎

systemLog:
    destination: file
    path: /test/mongo/mongod.log
    logAppend: true
security:
    authorization: enabled
storage:
    dbPath: /test/mongo/data
    directoryPerDB: true
net:
    port: 27017
    unixDomainSocket:
        enabled: false
processManagement:
    fork: true
    pidFilePath: /test/mongo/mongod.pid

说明

云数据库MongoDB默认使用的是WiredTiger存储引擎,并且开启了directoryPerDB选项,因此配置中指定了这个选项。

按Esc键退出编辑模式,键盘输入:wq保存并退出。

首先停止mongodb的运行状态:

sudo systemctl stop mongod

然后指定新建的配置文件mongod.conf来启动MongoDB。

mongod -f /test/mongo/mongod.conf

如下图,成功后继续。

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

等待启动完成后,执行如下命令登录MongoDB数据库,进入Mongo Shell。

当然您可以会遇到错误,不知道是不是来回测试的原因,我首次指定新的配置好使,后续就一直失败,

提示错误代码:

about to fork child process, waiting until server is ready for connections.
forked process: 31273
ERROR: child process failed, exited with 100
To see additional information in this output, start without the "--fork" option.

这是我们需要去原来数据目录删除【storage.bson】和【mongod.lock】,记得先备案,或者直接重命名,我的服务器原来的数据目录是【/var/lib/mongo】,如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

然后再次执行新配置命令,就可以了。

about to fork child process, waiting until server is ready for connections.
forked process: 1231
child process started successfully, parent exiting

翻译之后大概就是:即将分叉子进程,等待服务器准备好连接。分叉进程:1231,子进程已成功启动,父进程正在退出。

启动MongoDB,命令:

sudo systemctl start mongod

如果启动失败,查看错误日志命令:

sudo journalctl -xe -u mongod

解决问题之后,执行命令进入数据库查看:

mongo --host 127.0.0.1 -u <username> -p <password> --authenticationDatabase admin

<username>:该MongoDB实例的数据库账号,默认为root。

<password>:该数据库账号对应的密码。

说明

如果您的密码中包含特殊字符,则需要使用英文单引号(')包裹密码,如:'test123!@#'。否则可能会登录失败。

在Mongo Shell中,执行

show dbs

查询当前本地MongoDB中所有的数据库,以验证是否恢复成功。

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

至此恢复工作已成功完成,您可以在Mongo Shell中执行【exit】命令退出Mongo Shell

exit

完成上述步骤后,您即可使用单节点模式启动MongoDB数据库,如需使用副本集模式启动数据库请参考阿里云官网文档。

常用命令:

# 停止服务
sudo systemctl stop mongod
#重启
sudo systemctl restart mongod
#状态
sudo systemctl status mongod

#赋予权限:
sudo chown -R mongo:mongod /test/mongo/data
sudo chmod 755 /test/mongo/data

#彻底结束mongod
pkill mongod

当然了,你现在就会发现,无法启动MongoDB,至于原理我不晓得,查了好多资料都没有办法重启成功,后来真是逼得我没招没招得了眼看数据库已经恢复了,但是你看不见,也不能备份,于是我在宝塔面板的【MongoDB】尝试添加了以下远程数据库,地址就是本机的,发现可以链接,但是还是没有办法操作,如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

于是乎我就想着能不能在安装以下宝塔运营商店里的mongodb软件,理论可以实践开始,在选择版本的时候我选择了【4.4】,因为我的备份是4.2,相差不多,感觉应该可以,但是安装完成后系统提示“启动失败,指定PID: /www/server/mongodb/log/configsvr.pid(26881 ) 进程不存在”,估计是服务器安装两个MongoDB冲突导致,因为已经安装完成,只是不能启用,所以我打算更换下默认端口,然后重新指定宝塔的配置文件,

首先找到这两个目录,一个是【/var/lib/mongo】首次安装后生成的,一个是刚才重新指定的【/test/mongo/data】,将这两个目录里的文件删除或者重命名【storage.bson】和【mongod.lock】文件,然后在MongoDB软件的配置项,修改IP和端口还有数据目录,如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

如果保存无效,那么就点击【配置文件】在里面修改是一样的,然后保存,服务状态选择【启动】,你会发现启动完成,哈哈哈,凑巧了,哈哈哈。最后回到数据库菜单,选择【MongoDB】找到【同步数据库】,选择【从服务器同步到面板】,如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

这是系统会自动同步过来,因为之前我们的数据库目录指向了还原成功的目录,所以可以读取,然后使用【Navicat】软件去链接,如图:

阿里云RDS MongoDB数据库物理备份的xb文件格式恢复到本地数据库的图文教程

注意端口别弄错了,用新端口去访问,如果不行记得在云服务器防火墙开通端口访问权限,好了,至此MongoDB从备份到还原再到恢复数据已经完成了,接下来就是重新备份sql格式,恢复到其他服务器也可以直接使用,不在需要这么繁琐的操作了,哎妈呀,累死我了,好了我得去歇会,因为我是反反复复测试了好几次,部分可能重复,但是不管怎么样算是成功了。有问题的留言反馈吧~

文章声明:以上内容(如有图片或视频亦包括在内)除非注明,否则均为网站名称原创文章,转载或复制请以超链接形式并注明出处。https://xz.itlaoli.com/blog/851.html

« 上一篇
下一篇 »

相关推荐

想搭Halo博客?MySQL和PostgreSQL怎么选?看完这篇就懂了

2025年09月02日

6824阅读

告别局域网限制,cpolar 内网穿透+宝塔面板,公网远程访问超简单

2025年08月26日

3793阅读

windows修改服务器远程桌面端口图文教程

2025年08月04日

3676阅读

为什么本地 HTML、JS、JSON 文件会出现跨域问题?

2025年07月18日

4254阅读

搭建自己的技术博客有什么意义?

2025年07月03日

4172阅读

解决Zblog文章中Emoji表情显示为问号的问题​

2025年06月30日

3910阅读

发表评论

访客 访客
评论列表 (暂无评论,4000人围观)

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码