MySQL连不上,老是提示1045权限错误,这到底咋整啊?
- 问答
- 2026-01-04 14:43:13
- 20
行,咱就直接唠这个MySQL的1045错误,这个错误提示说白了就是“权限不对,不让你进”,就像你回家掏钥匙,锁眼对上了但钥匙就是拧不动,急死人,别一上来就想着重装系统或者瞎改配置,咱们一步步来,跟破案似的,把可能性一个个排除掉。
最最常见的原因,十个里面有八个,是密码真的输错了,你先别嫌我啰嗦,这事儿太容易发生了,MySQL的密码是区分大小写的,你仔细看看是不是不小心按了大写锁定键(Caps Lock),还有就是,有时候我们会在密码里加一些特殊符号,比如感叹号、@符号这些,在命令行或者某些客户端里,这些符号可能有特殊含义,需要转义,最简单的办法,你先找个能纯文本输入的地方,把密码打出来看清楚,然后尝试用单引号把密码包起来再输入,-p'your_password',有时候光一个空格或者一个点输错了,就够你折腾半天的,来自大量DBA(数据库管理员)的日常经验表明,反复确认密码是解决此类问题的第一步,也是最有效的一步。
如果密码百分之百确定没错,那咱们就往下查,第二个常见坑是,你试图从“不对”的地方登录,MySQL管这个叫“主机名”(host),什么意思呢?你安装MySQL的时候,它会默认创建一个叫‘root’的用户(就是大总管),但这个‘root’用户可能不是在哪都能登录的,你可能会看到类似 'root'@'localhost' 或者 'root'@'127.0.0.1' 这样的记录。localhost 意思是只能从安装MySQL的这台电脑本机登录。0.0.1 也是本机,但用的是IP地址方式,如果你是从另一台电脑(比如你的Windows电脑去连Linux服务器上的MySQL),那你用root账号是根本登不上去的,因为服务器上的MySQL认为root只能“本地”登录,这时候你需要的是一个类似 'root'@'%' 的用户,那个 符号是个通配符,表示允许从任何主机连接,出于安全考虑,一般不建议给root开这么大的权限,最好是创建一个新用户,只允许从你指定的IP地址登录。

那怎么知道现在有哪些用户、他们能从哪登录呢?这需要你能先想办法登录到MySQL的系统内部去看,如果你在本机,可以尝试用系统的root权限配合MySQL的免密登录方式临时进去,具体操作是:先停掉MySQL服务,然后加上一个特殊参数 --skip-grant-tables 来启动,这个参数的意思是启动时不检查权限表,这样你就能无密码进去了,进去之后,赶紧去修改密码或者查看用户权限。但这是个危险操作,因为这段时间内任何人都能无密码连接你的数据库,所以操作一定要快,弄完之后立刻用正常方式重启MySQL服务,网上很多教程,比如CSDN、博客园上的技术文章,都会详细描述这个步骤,但都会强调这是最后的手段且要非常小心。
查看用户和权限的命令是:
SELECT user, host FROM mysql.user;
你会看到一个列表,看看你要用的那个用户名,对应的host是不是你正在连接的那台机器,如果不是,你就需要修改权限或者新建一个用户。

第三个可能性,尤其在你刚安装完MySQL之后,是MySQL自己有一个初始化的密码,不是你设的那个,特别是用一些Linux发行版(比如某些版本的Ubuntu)的包管理器安装,或者用MySQL的安装包安装时,它会在安装过程中在屏幕上或者日志文件里生成一个临时随机密码,你必须用这个临时密码第一次登录,然后马上改掉,很多人没注意到这个提示,直接用自己的密码去登录,当然会报1045,这个临时密码通常记录在MySQL的错误日志文件里,你可以去翻找一下,文件路径一般在 /var/log/mysqld.log 或者 /var/log/mysql/error.log,用 sudo grep 'temporary password' /var/log/mysqld.log 这样的命令可以快速搜索到。
还有一种情况比较隐蔽,就是密码验证插件(plugin)的问题,MySQL不同版本默认的密码加密方式不一样,老版本是 mysql_native_password,新版本(比如8.0以上)换成了更安全的 caching_sha2_password,如果你的客户端工具或者程序库比较老,可能不认识这个新式的密码,也会连不上,报权限错误,这时候你可以在创建用户或修改密码时,显式指定使用老的验证插件,ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';,很多编程语言的旧版数据库连接驱动都遇到过这个问题,在Stack Overflow这类问答社区上有大量讨论。
别忘了检查防火墙,虽然1045是权限错误,不是连接超时或拒绝连接,但有时候网络层面的拦截也可能导致奇怪的认证失败,确保MySQL的端口(默认3306)是开放的。
遇到1045,别慌,按这个顺序排查:核对密码 -> 检查连接的主机地址是否被允许 -> 确认是否有初始化临时密码 -> 考虑密码插件兼容性问题,大部分情况下,问题都出在前两项,如果所有这些都试过了还不行,那可能就得去查更详细的MySQL错误日志了,里面可能会有更具体的线索,搞数据库权限修改前,有条件的话先备份一下用户表,以防手滑改出更大问题。
本文由盘雅霜于2026-01-04发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/74382.html
