引言
在linux可能存在安装mysql安装失败,一直不出现默认密码
/usr/local/mysql/mysql-8.0.26/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql/mysql-8.0.26 --datadir=/usr/local/mysql/mysql-8.0.26/data --lower-case-table-names=1 --initialize
一,可能存在下面情况:
1. 初始化未成功执行
如果你之前运行过 --initialize
命令但失败了(比如“data 目录不可用”),那么数据库里可能根本没有生成 root 用户和密码。
2. 忘记临时密码
MySQL 初始化时会生成一个临时密码并输出到控制台或日志文件。如果你当时没记录下来,又尝试使用错误的密码登录,就会出现这个错误。
3. 已经设置过 root 密码
如果你曾经修改过 root 密码,而现在忘记了,也会导致登录失败。
二,重置 MySQL root 密码
要解决这个问题,我们需要以“跳过权限验证”的方式启动 MySQL,然后手动修改 root 用户的密码。
步骤一:停止 MySQL(如果正在运行)
pkill mysqld
确认是否还有进程在运行:
ps aux | grep mysqld
如果有残留进程,使用 kill PID
杀掉它们。
步骤二:以 skip-grant-tables 模式启动 MySQL
/usr/local/mysql/mysql-8.0.26/bin/mysqld \
--user=mysql \
--basedir=/usr/local/mysql/mysql-8.0.26 \
--datadir=/usr/local/mysql/mysql-8.0.26/data \
--skip-grant-tables &
这个模式下不需要密码即可登录,并且可以修改用户权限。
风险
- 跳过权限验证:意味着任何能访问数据库的人,都可以无密码登录并执行任意 SQL。
- 数据安全隐患:如果服务器暴露在公网或多人共享环境,可能导致数据被篡改或删除。
- 违反最小权限原则:不符合企业级系统安全管理规范。
步骤三:无密码登录 MySQL
/usr/local/mysql/mysql-8.0.26/bin/mysql -u root
这时你应该可以直接进入 MySQL shell,不需要输入密码。
步骤四:修改 root 用户密码
进入 MySQL 后,依次执行以下命令:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
exit;
替换 '你的新密码'
为你想设置的新密码。
步骤五:正常重启 MySQL
退出后,关闭当前的“免密模式”实例:
pkill mysqld
再以正常模式启动 MySQL:
/usr/local/mysql/mysql-8.0.26/bin/mysqld_safe --user=mysql &
或者使用 systemd(如果你已配置):
systemctl start mysql
步骤六:测试新密码登录
/usr/local/mysql/mysql-8.0.26/bin/mysql -u root -p
输入你刚才设置的新密码,应该就能成功登录了!
三,额外建议
查看初始化时生成的临时密码(可选)
如果你不确定初始化是否成功,可以查看 MySQL 日志文件(如 /usr/local/mysql/mysql-8.0.26/log/mysql.log
)中是否有类似下面的内容:
A temporary password is generated for root@localhost: Abc123!@#def
设置开机自启(推荐)
将 MySQL 加入 systemd
管理,方便开机自启和日常维护。请参照 项目上线(若依前后分离版)
四,总结一句话
出现 “Access denied for user ‘root’@‘localhost’” 错误,通常是因为密码错误或初始化失败。可以通过
--skip-grant-tables
模式重置 root 密码来解决。在实际生产中,要
开始加水了!!!