MySQL ERROR 1045 (28000)权限拒绝问题求助:bash脚本验证管理员账号失败
你遇到的这个权限拒绝问题很常见,我整理几个你可能没注意到的排查方向,按顺序试试:
检查用户的主机匹配规则
MySQL的用户是用户名@主机的组合,哪怕用户名对了,主机不匹配也会拒绝访问。先登录到MySQL(比如用root账号),执行这条命令查看admin用户的主机配置:SELECT user, host FROM mysql.user WHERE user = 'admin';如果结果里没有
admin@localhost,只有admin@%或者admin@127.0.0.1,那问题就出在这:- 如果你用
localhost登录(默认是socket连接),需要确保存在admin@localhost用户; - 如果是
admin@127.0.0.1,登录时要加上-h 127.0.0.1强制用TCP/IP连接,比如:mysql -u admin -p$dbadminpass -h 127.0.0.1
- 如果你用
排查密码中的特殊字符解析问题
如果你的密码包含bash的特殊字符(比如$、!、&、空格等),直接用-p$dbadminpass会被bash解析修改,导致实际传入MySQL的密码不对。解决方法是给密码加上双引号包裹:mysql -u $dbadmin -p"$dbadminpass"这样bash就会把整个密码当作字符串传递,不会解析里面的特殊字符。
检查MySQL 8.0+的认证插件兼容性
如果你用的是MySQL 8.0及以上版本,默认的认证插件是caching_sha2_password,有些旧版本的MySQL客户端可能不支持这个插件,导致登录失败。可以把admin用户的认证插件改成兼容的mysql_native_password:ALTER USER 'admin'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;确认权限是否已刷新
虽然用CREATE USER和GRANT命令后权限通常会自动生效,但偶尔也会有缓存问题。创建用户并授权后,手动执行一次刷新:FLUSH PRIVILEGES;然后再尝试登录。
直接用root登录测试对比
先试试用root账号能不能正常登录:mysql -u root -p如果root能登录,说明MySQL服务本身没问题,问题还是出在admin用户的配置上;如果root也不能登录,那可能是MySQL服务的权限配置或者socket文件权限有问题。
内容的提问来源于stack exchange,提问作者o'gamingSCV

