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

MySQL报错1044/1045:交互登录成功 命令行传密码访问被拒绝

问题原因说明

密码包含美元符号是导致该问题的直接原因,同时你使用的部分传参写法本身存在语法错误:

  • 语法错误问题:mysql -u mlimon -p mySqlPassword 这种写法本身不符合MySQL命令规范,-p参数后跟明文密码时,参数和密码之间不能加空格,加空格后MySQL会将后面的字符串识别为要连接的数据库名,而非密码,必然会触发权限报错。
  • 特殊字符解析问题:交互输入密码时,输入内容不会经过Shell的特殊字符预处理,会原封不动传递给MySQL做校验,因此包含美元符号的密码可以正常校验通过。但直接写在命令行的参数会先经过Shell解析,美元符号$会被Shell识别为变量前缀,触发变量替换逻辑,比如密码为abc$123时,Shell会尝试读取$123对应的变量值,无对应变量时该部分会被替换为空,最终传递给MySQL的密码为abc,和真实密码不一致,因此报权限错误。
  • HereDoc写法的逻辑问题:mysql -umlimon -p <<MY_QUERY 这种写法中-p后未携带密码,MySQL会等待用户交互输入密码,非交互场景下没有输入就会直接报错。
解决方案

1. 单引号包裹密码(最便捷)

单引号会让Shell忽略内部所有特殊字符,不会触发美元符号的变量解析,注意-p和单引号之间不要加空格,示例:

# 直接登录
mysql -u mlimon -p'你的实际密码'
# 批量执行SQL语句
mysql -u mlimon -p'你的实际密码' <<MY_QUERY
USE mysql
SHOW tables;
MY_QUERY
# 单条SQL执行
mysql -u mlimon -p'你的实际密码' -e "USE mysql; SHOW tables;"

2. 使用配置文件(更安全,避免明文密码泄露)

创建仅当前用户可读的MySQL客户端配置文件,例如~/.mysql_login.cnf,写入内容:

[client]
user = mlimon
password = 你的实际密码(无需转义特殊字符)

执行权限限制命令:chmod 600 ~/.mysql_login.cnf,避免其他用户读取密码。
后续使用时直接指定配置文件即可,不需要在命令行传密码:

mysql --defaults-extra-file=~/.mysql_login.cnf <<MY_QUERY
USE mysql
SHOW tables;
MY_QUERY

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 17:30:04