欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

springboot项目实现mysql备份功能的坑

时间:2023-05-16

话不多说,进入正题,有一个bug,一直提示找不到文件夹,一顿排查后发现是file.mkdir()只能在app容器中创建目录,无法在宿主机中创建,于是我将目录与宿主机做了一个卷映射。但现在最新的问题来了:

备份语句执行失败

开始排查

可疑点一:由于之前是可以执行的,尝试将卷映射去掉看看
失败:难道之前只是在命令行执行,并没有部署上去执行?果然不记录就会开始怀疑(想起来了,确实没有部署过)
找到原因:其实想想为什么提示docker不存在?是因为springboot的jar包中的容器中没有这个命令,
那么其实只要将这个命令放到宿主机中运行即可
可疑点二:代码添加了一行时区,虽然可能性不大,但我决定试试(现在想想,其实也是没有办法的办法了哈哈,但凡有点想法,也不至于这样排查啊)

解决方案:
借助docker in docker 的思路应该可以解决
参考链接:在docker容器中调用和执行宿主机的docker

经过验证,还是不太行,还是得将命令在容器外部执行

尝试一:在容器内部运行命令

进入容器内部

docker exec -it app bash

命令:

docker exec -it mysql mysqldump -u用户名 -p密码 r_blog > /mnt/docker/mysql_backup/zzz.sql

发现可行,那具体什么原因呢?

怀疑是没有指定数据库端口号造成的,那就试试吧

docker exec -i mysql mysqldump -h81.71.87.241 -P端口号 -u用户名 -p密码 r_blog > /mnt/docker/mysql_backup/abca.sql

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。