求助:无法在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
相关产品推荐
相关产品推荐

