阿里云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格式。
对于 _qp.xb 格式我们继续使用xtrabackup解压物理备份文件。
xtrabackup --decompress --remove-original --target-dir=/test/mongo/data/
注意,xbstream和xtrabackup目录参照李洋博客《阿里云RDS MySQL数据库物理备份的xb文件格式恢复到本地数据库的图文教程》文章的安装方法,然后直接引用目录,不能直接使用。
执行以上命令解压备份文件, 成功如图:
然后我们回到目录下刷新,看看是不是所有的qp格式成功转换。
目前数据库恢复完成,但是我们还需要将他恢复到数据里,一遍我们去查看源数据是否完成,接下来执行如下命令在/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
如下图,成功后继续。
等待启动完成后,执行如下命令登录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】,如图:
然后再次执行新配置命令,就可以了。
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中所有的数据库,以验证是否恢复成功。
至此恢复工作已成功完成,您可以在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】尝试添加了以下远程数据库,地址就是本机的,发现可以链接,但是还是没有办法操作,如图:
于是乎我就想着能不能在安装以下宝塔运营商店里的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和端口还有数据目录,如图:
如果保存无效,那么就点击【配置文件】在里面修改是一样的,然后保存,服务状态选择【启动】,你会发现启动完成,哈哈哈,凑巧了,哈哈哈。最后回到数据库菜单,选择【MongoDB】找到【同步数据库】,选择【从服务器同步到面板】,如图:
这是系统会自动同步过来,因为之前我们的数据库目录指向了还原成功的目录,所以可以读取,然后使用【Navicat】软件去链接,如图:
注意端口别弄错了,用新端口去访问,如果不行记得在云服务器防火墙开通端口访问权限,好了,至此MongoDB从备份到还原再到恢复数据已经完成了,接下来就是重新备份sql格式,恢复到其他服务器也可以直接使用,不在需要这么繁琐的操作了,哎妈呀,累死我了,好了我得去歇会,因为我是反反复复测试了好几次,部分可能重复,但是不管怎么样算是成功了。有问题的留言反馈吧~
文章声明:以上内容(如有图片或视频亦包括在内)除非注明,否则均为网站名称原创文章,转载或复制请以超链接形式并注明出处。https://xz.itlaoli.com/blog/851.html










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