LinuxCentOS7MySQL8.0安装后初始化密码错误解决方法

admin linux教程 4


刚在 CentOS 7 上装完 MySQL 8.0 的朋友,是不是常遇到这种情况:输临时密码提示错误,自己设的密码又登不上,明明步骤没错,却卡在登录这一步,急得不行?别慌,新手遇到初始化密码错误太常见了,今天兔子哥就把各种解决办法讲透,从找临时密码到重置密码,一步步教你搞定,看完保证你能顺利登录!

先搞懂为啥会密码错误?常见原因看这里


很多新手以为密码错就是输错了,其实原因可能有好几种,先看看你属于哪种:
  1. 临时密码找错了:MySQL 8.0 安装后会生成临时密码,藏在日志里,新手常找错地方或复制时多了空格。
  2. 临时密码过期了:临时密码有有效期,安装后隔太久没改密码,就会失效。
  3. 密码格式不对:MySQL 8.0 要求密码有大小写、数字和符号,设太简单会提示错误但你没注意。
  4. 权限没刷新:改了密码没执行刷新命令,导致新密码没生效。

给大家整个表格,对比下常见错误现象和对应原因,一目了然:
错误提示可能原因解决方向
Access denied for user 'root'@'localhost' (using password: YES)密码错误或临时密码失效重置密码
Your password has expired. To log in you must change it using a client that supports expired passwords.临时密码过期强制修改密码
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements密码格式太简单按要求设复杂密码

第一步:正确找到临时密码,别再找错啦


MySQL 8.0 的临时密码藏在日志文件里,正确的查找方法是这样的:
打开终端,输这条命令:
plaintext
grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log

输完后会看到类似这样的内容:
2024-05-20T10:00:00.123456Z 6 [Note] A temporary password is generated for root@localhost: Abc123!@#
这里的 “Abc123!@#” 就是临时密码,注意哦,密码里的特殊符号(比如!、@)都要原样输入,复制的时候别多带空格,也别漏字符,很多新手就错在这一步。
要是输命令后没结果,可能是日志文件路径不对,或者安装时没生成临时密码。这时候可以试试另一条命令:
plaintext
cat /var/log/mysqld.log | grep password

有时候日志里会用其他关键词记录密码,多翻几行看看,总能找到的。

第二步:用临时密码登录,登录不上就重置


如果用临时密码登录提示错误,别着急删库重装,先试试重置密码,步骤很简单:

1. 停止 MySQL 服务


先把正在运行的 MySQL 服务停掉,命令是:
plaintext
systemctl stop mysqld

停服务的时候可能会等几秒,耐心等它停稳,别着急下一步。

2. 跳过密码验证启动 MySQL


这一步是让 MySQL 暂时不用密码就能登录,输这条命令:
plaintext
mysqld_safe --skip-grant-tables &

输完后终端可能会停一会儿,出现 “mysqld_safe Logging to '/var/log/mysqld.log'” 就说明成功了,这时候别关这个终端,再开一个新的终端窗口操作。

3. 无密码登录 MySQL


在新终端里输:
plaintext
mysql -u root

这时候不用输密码,直接回车就能登录,看到 “mysql>” 提示符就对了。

4. 重置 root 密码


登录后先刷新权限,输:
plaintext
FLUSH PRIVILEGES;

然后改密码(把 “你的新密码” 换成自己的密码,记得要有大小写、数字和符号):
plaintext
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

比如设成 “Mysql@123456” 就不错,既符合要求又好记。输完后再刷新一次权限:
plaintext
FLUSH PRIVILEGES;

然后输 “exit” 退出 MySQL。

5. 重启 MySQL 服务


回到第一个终端,按 Ctrl+C 停止刚才的临时服务,然后正常启动 MySQL:
plaintext
systemctl start mysqld

这时候用新密码登录试试:
plaintext
mysql -u root -p

输入你刚设的新密码,应该就能登录成功啦!

第三步:解决特殊情况,这些坑要避开


有些朋友按上面的步骤做了,还是登录不上,可能遇到了这些特殊情况:

情况一:密码设了但提示 “格式不符合要求”


MySQL 8.0 有密码强度检查,太简单的密码不让用。这时候要么按要求设复杂密码,要么降低密码强度要求(新手不建议,不安全)。降低要求可以登录后输:
plaintext
set global validate_password.policy=LOW;set global validate_password.length=6;

这样密码可以设成 6 位数字,比如 “Mysql1”。

情况二:提示 “user 'root'@'localhost' not found”


这是因为用户权限表有问题,登录后输这条命令重建用户:
plaintext
CREATE USER 'root'@'localhost' IDENTIFIED BY '你的新密码';GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;FLUSH PRIVILEGES;

然后退出重登就行。

情况三:云服务器上密码总错


要是你用的是阿里云、腾讯云这类服务器,除了系统里的密码,还要检查是不是安全组没开 3306 端口,但这和密码错误关系不大。不过有时候云服务器的 MySQL 配置文件会有特殊设置,这时候可以删了数据目录里的文件重新初始化:
plaintext
systemctl stop mysqldrm -rf /var/lib/mysql/*mysqld --initialize --user=mysqlsystemctl start mysqld

然后重新找临时密码登录,这招比较狠,但实在没办法时很好用。

自问自答几个核心问题


问:为什么临时密码有时候找不着?
答:可能是安装时没生成,或者日志被清理了。这时候就用跳过密码验证的方法重置,不用纠结临时密码了。
问:重置密码后还是登录不上,提示 “Can't connect to MySQL server on 'localhost'”?
答:这不是密码问题,是 MySQL 服务没启动,输systemctl start mysqld启动服务再试。
问:改密码时提示 “ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement”?
答:因为没刷新权限,先输FLUSH PRIVILEGES;再改密码就行。

兔子哥的个人建议


新手记密码别太随意,最好专门找个地方记下来,比如手机备忘录,不然重置密码虽然不麻烦,但来回折腾费时间。设密码的时候别用太复杂的,找个自己好记又符合要求的,比如 “你的名字首字母 + 生日 + 特殊符号”,像 “Zhang3@1990” 这样就挺好。
另外,每次改完密码一定要刷新权限,不然新密码不生效,这是新手最容易忘的一步。遇到问题别慌,MySQL 的日志文件/var/log/mysqld.log里藏着很多线索,多看看日志,很多错误原因都能找到。
其实密码错误真不是大问题,多试两次就熟了,刚开始学 Linux 和 MySQL 都这样,谁没卡过密码呢?按上面的步骤一步步来,肯定能解决。有实在搞不定的,评论区问我,我看到就回!

标签: 2024-05-20T10 一目了然

发布评论 1条评论)

  • Refresh code

评论列表

2025-10-25 06:40:24

CentOS7MySQL8密错解决