You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中MySQL执行mysqldump无法创建备份文件的问题求助

解决Docker容器内MySQL数据导出问题

问题根源

你执行的docker exec命令中,>重定向是宿主机Shell的操作,而非容器内部的命令行为:

  • 当你写> /opt/backup/my_db.sql时,宿主机尝试在自身的/opt/backup目录创建文件,若该目录不存在就会报错;
  • 若导出到当前目录或/tmp,文件实际生成在宿主机的对应路径,而非容器内,所以你在容器里找不到。

可行解决方案

方案1:让重定向在容器内部执行

用sh -c将mysqldump命令和重定向逻辑整体封装,交给容器内的Shell执行,这样文件会写入容器内的/opt/backup(对应宿主机的./backup):

sudo docker exec mysql sh -c 'mysqldump -u root -p123456 --no-tablespaces --databases my_db > /opt/backup/my_db.sql'

方案2:直接重定向到宿主机的挂载目录

利用Docker卷挂载的同步关系,直接将输出写入宿主机的./backup目录(与容器内/opt/backup绑定):

sudo docker exec mysql mysqldump -u root -p123456 --no-tablespaces --databases my_db > ./backup/my_db.sql

执行后直接去宿主机当前目录的backup文件夹找导出文件即可。

方案3:先导出到容器临时目录,再复制到宿主机

如果前两种方案有权限问题,可先将文件导出到容器的/tmp(默认有写入权限),再用docker cp复制到宿主机:

# 容器内导出到临时目录
sudo docker exec mysql mysqldump -u root -p123456 --no-tablespaces --databases my_db > /tmp/my_db.sql
# 复制到宿主机指定目录
sudo docker cp mysql:/tmp/my_db.sql ./backup/

额外注意事项

确保宿主机的./backup目录权限与容器用户匹配,避免写入失败:

sudo chown 115:115 ./backup

内容的提问来源于stack exchange,提问作者eastwater

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:38:24