MySQL 8 mysql二进制文件不遵循-p参数触发密码输入提示问题
MySQL 8客户端-p参数行为异常的问题排查与解决
环境说明
- MySQL 5.7与8服务器均配置了使用
mysql_native_password插件、密码一致的'joe'@'%'账号 - 测试使用对应版本的
mysql客户端二进制程序
MySQL 5.7客户端的正常表现
场景1:本地/跨主机使用joe用户连接
# 在MySQL 5.7本地主机执行 $ mysql -u joe -h localhost -P 3306 -p Enter password: # 在MySQL 5.7本地主机连接远程MySQL 8服务器 $ mysql -u joe -h remotehost -P 3306 -p Enter password:
场景2:使用.my.cnf中配置的root用户连接
# 在MySQL 5.7本地主机使用.my.cnf中定义的root用户连接 $ mysql -u root -p Enter password:
MySQL 8客户端的异常表现
场景1:本地/远程使用joe用户连接直接报错
# 在MySQL 8本地主机执行 $ mysql -u joe -h localhost -P 3306 -p ERROR 1045 (28000): Access denied for user 'joe'@'localhost' (using password: YES) # 在MySQL 8本地主机连接远程MySQL 5.7服务器 $ mysql -u joe -h remotehost -P 3306 -p ERROR 1045 (28000): Access denied for user 'joe'@'remotehost' (using password: YES)
场景2:使用.my.cnf中配置的root用户连接时跳过密码提示直接成功
# 在MySQL 8本地主机使用.my.cnf中定义的root用户连接 $ mysql -u root -p Welcome to the MySQL monitor.
验证与临时解决方法
- 将joe的凭据写入
.my.cnf后可正常连接,说明密码本身有效 - 临时解决:执行
mysql --no-defaults -u joe -h <host> -P <port> -p,可正常触发密码输入提示
根本解决方法
1. 检查并修正.my.cnf配置
MySQL 8客户端会优先读取配置文件中的凭据,即使指定了-p参数。需检查.my.cnf(包括~/.my.cnf、/etc/my.cnf等路径下的配置文件)中的[client]段,删除或修正可能导致冲突的配置项:
[client] # 若存在以下配置,需删除或修改为正确值 # password=错误密码 # user=root
如果需要保留配置文件中的其他通用参数(如端口、socket),可针对特定用户创建单独的配置段,示例:
[client] port=3306 socket=/var/lib/mysql/mysql.sock [clientjoe] user=joe
连接时使用mysql --defaults-group-suffix=joe -p,此时-p会正常触发密码输入提示。
2. 强制客户端要求输入密码
在.my.cnf的[client]段添加以下配置,强制客户端在指定-p时要求输入密码,覆盖配置文件中的凭据:
[client] password-required=1
3. 显式指定认证插件
确保客户端使用与服务器匹配的mysql_native_password插件,连接时可显式指定:
mysql -u joe -h <host> -P <port> -p --default-auth=mysql_native_password
若验证有效,可将default-auth=mysql_native_password添加到.my.cnf的[client]段,永久生效。
内容的提问来源于stack exchange,提问作者Joe Creighton
相关产品推荐
相关产品推荐

