控制台导入MySQL SQL Dump遇异常:密码有效却验证失败
问题原因及解决方法
这事儿其实是你的命令参数用错了,再加上输入重定向的干扰,才导致密码验证失败。具体拆解下:
核心问题:-p参数用法 + 输入重定向的冲突
先看你失败的导入命令:
mysql -u admin -p password -D targetdbname < /var/www/vhosts/domainname.de/httpdocs/sp.sql这里有两个坑:
-p的用法不对:MySQL里,-p后面如果加空格,会触发交互式输入密码;要是想在命令行直接写密码,必须写成-ppassword(-p和密码之间不能有空格),或者用--password=password的格式。你写的-p password会让MySQL把password当成要连接的数据库名,不是密码,再加上你又用-D targetdbname指定了另一个数据库,参数直接乱套了。- 输入重定向抢了密码输入的通道:当你用
<导入SQL文件时,MySQL的标准输入已经被替换成这个SQL文件的内容了。这时候用-p让它等你输密码,它根本读不到你手动敲的密码,反而会把SQL文件的第一行当成密码,自然验证失败。
再看你能成功登录的命令
mysql -u admin -p password targetdbname:
这里因为没有输入重定向,mysql会把-p后面的password当成一个不存在的数据库名(忽略掉),然后正常弹出密码输入提示,你手动输入的正确密码能被正常读取,所以登录成功了。
正确的导入命令写法
给你两种靠谱的写法:
写法1:交互式输入密码(推荐,更安全,不会把密码留在命令历史里)
删掉命令里的password,保证-p后面啥也不加:
mysql -u admin -p -D targetdbname < /var/www/vhosts/domainname.de/httpdocs/sp.sql
执行后直接在提示符输入密码就行——这次MySQL会先读你输入的密码,再去读SQL文件的内容,不会冲突。
写法2:命令行直接指定密码(适合脚本自动化,注意安全风险)
把密码直接跟在-p后面(别加空格):
mysql -u admin -ppassword -D targetdbname < /var/www/vhosts/domainname.de/httpdocs/sp.sql
⚠️ 提醒下:这种写法会让密码出现在命令历史和进程列表里,有泄露风险,生产环境尽量别用。
内容的提问来源于stack exchange,提问作者JuJu
相关产品推荐
相关产品推荐

