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

求助:无法在Docker容器中恢复MySQL 8.0备份文件

解决Docker中MySQL 8.0容器恢复备份的问题

错误原因分析

你遇到的ERROR 1064是因为备份文件mysql-5.7-dump.sql开头包含了mysqldump工具的警告信息(比如mysqldump: [Warning] Using a password on the command line interface can be insec),这些内容不属于合法SQL语句,导致MySQL执行时语法报错。

解决方案

1. 修正backup.cnf配置格式

MySQL配置文件中,参数值不需要加引号,否则可能被解析为密码的一部分(虽然你的show databases命令能运行,但规范配置能避免潜在问题):

[client]
user=root
password=12345678

修改后重启容器生效:

sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml restart mysql-8.0

2. 清理备份文件中的非SQL内容

直接过滤掉备份文件开头的警告行:

sed -i '/^mysqldump: \[Warning\]/d' /home/vagrant/services/data/mysql-5.7-dump.sql

如果不想修改原文件,也可以用管道实时过滤后恢复:

grep -v '^mysqldump: \[Warning\]' /home/vagrant/services/data/mysql-5.7-dump.sql | sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml exec -T mysql-8.0 mysql --defaults-file=/etc/mysql/conf.d/backup.cnf

3. 备选方案:将备份文件拷贝到容器内恢复

如果宿主机到容器的文件重定向有异常,可先将备份文件传入容器再执行恢复:

# 拷贝备份文件到容器临时目录
sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml cp /home/vagrant/services/data/mysql-5.7-dump.sql mysql-8.0:/tmp/

# 在容器内执行恢复
sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml exec -T mysql-8.0 mysql --defaults-file=/etc/mysql/conf.d/backup.cnf < /tmp/mysql-5.7-dump.sql

4. 验证恢复结果

恢复完成后,用你之前的命令验证:

sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml exec -T mysql-8.0 mysql --defaults-file=/etc/mysql/conf.d/backup.cnf -e "show databases"

或者查看具体库的表:

sudo docker-compose -f /home/vagrant/projects/util/services/docker-compose.yml exec -T mysql-8.0 mysql --defaults-file=/etc/mysql/conf.d/backup.cnf -e "use your_database; show tables;"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 06:00:00