将dump文件恢复到MySQL Docker镜像时遇SQL语法错误求助
解决MySQL导入时的ERROR 1064语法错误
从你的错误信息和操作过程来看,核心问题出在你要导入的source.sql文件里混进了非SQL语句的内容——具体就是mysqldump导出时的警告文本mysqldump: [Warning] Using a password on the command line interface can be insec,MySQL尝试执行这行无效文本,直接触发了语法错误。
下面是一步步的解决方法:
1. 清理SQL文件中的无效内容
打开本地的./source.sql文件,检查开头或文件内是否存在类似这样的警告行:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
把所有这类不属于SQL语句的注释、警告文本全部删除,只保留纯SQL命令(比如CREATE TABLE、INSERT、ALTER这类合法语句)。
2. 优化导入命令的写法
你的命令可以做些调整,避免引号转义带来的潜在问题:
- 如果在bash环境下执行,密码部分可以直接写,不用额外转义引号:
docker exec -i sql-db sh -c 'exec mysql -uroot -psuper_secret_pw users' < ./source.sql - 更安全的方式是用环境变量传递密码(避免密码暴露在命令行历史中):
这个前提是你的docker exec -i sql-db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" users' < ./source.sqlsql-db容器已经设置了MYSQL_ROOT_PASSWORD环境变量(从你提供的容器信息来看,应该是已经配置过的)。
3. 确认目标数据库存在
执行导入前,先验证users数据库是否已经在容器内创建:
docker exec -it sql-db mysql -uroot -psuper_secret_pw -e "SHOW DATABASES;"
如果输出里没有users,先创建这个数据库:
docker exec -it sql-db mysql -uroot -psuper_secret_pw -e "CREATE DATABASE IF NOT EXISTS users;"
完成以上步骤后,重新执行导入命令,应该就能正常完成数据导入了。
内容的提问来源于stack exchange,提问作者Ctfrancia
相关产品推荐
相关产品推荐

