MySQL 5.6命令行直接带密码连接失败,手动输入可正常连接求助
解决MySQL命令行带密码连接失败的问题
我来帮你搞定这个问题,你遇到的情况其实很常见,咱们一步步拆解原因和解决方案:
问题根源
你输入的密码Admin@1234里包含了特殊字符@,Bash会把@后面的内容当成主机地址来解析,导致实际传递给MySQL的密码只有Admin,自然就会触发Access denied的错误。而手动输入密码时,Shell不会解析这些特殊字符,所以密码能完整传递,连接就成功了。
可行解决方案
方案1:用单引号包裹密码(快速临时解决)
把密码用单引号括起来,让Shell不解析里面的特殊字符。注意-p和单引号之间不要加空格,否则MySQL会把单引号当成密码的一部分:
mysql -u root -p'Admin@1234'
方案2:使用配置文件(推荐,安全又方便)
把登录信息存在用户专属的配置文件里,既避免命令行密码的安全风险,又不用每次输入密码:
- 在你的用户主目录下创建/编辑
.my.cnf文件:vi ~/.my.cnf - 写入以下配置内容:
[client] user=root password=Admin@1234 host=localhost - 修改文件权限,防止其他用户读取(非常重要):
chmod 600 ~/.my.cnf
之后直接输入mysql就能自动连接,还能消除命令行密码的安全警告。
方案3:通过环境变量传递(不推荐)
可以用MYSQL_PWD环境变量传递密码,但这个方法不够安全,因为环境变量可能被其他进程读取到:
MYSQL_PWD='Admin@1234' mysql -u root
另外提一句,那个Using a password on the command line interface can be insecure的警告,是因为命令行输入的密码会出现在进程列表(比如ps命令)里,所以方案2是最稳妥的选择。
内容的提问来源于stack exchange,提问作者Parag Deshmukh
相关产品推荐
相关产品推荐

