Ubuntu下MySQL安装好之后第一次登陆、修改密码、及出现密码登陆被拒绝等问题解决(access denied(password:yes))

本文介绍了一种在未设置初始密码的情况下,如何通过修改配置文件并登录MySQL来为root用户设置新密码的方法。包括查找配置文件、使用特定用户登录、更新密码等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   在安装好mysql好之后,并没有设置密码,此时需要自己重新设置密码,首先找到:

1./etc/mysql/debian.cnf 文件,找到里面的用户名和密码,

2.用mysql -u debian-sys-maint -p 登陆,输入对应的密码;

3.然后进去之后,use mysql 使用mysql数据库;

4.select user,host,password(部分版本变更为了authentication_string)from user;便可以查看自己的root用户在主机上

是否设置了密码;(一般默认的主机名为localhost,如果你自己的主机名不是一样,则必须改成相同,否则是登陆不上的,想去可查询https://stackoverflow.com/questions/10299148/mysql-error-1045-28000-access-denied-for-user-billlocalhost-using-passw

5.如果以上没问题的话,则修改密码:update user set password=PASSWORD('root') where User='root';

(如果提示password这列没有,则用这句:update mysql.user set authentication_string=password('root') where user='root') ;

6.完成以上基本设置就完成了,然后重启mysql(/etc/init.d/mysql restart),登陆就行;

如果是出现access denied(password:yes)这个问题,应该是密码没有设的问题,设好之后应该不会出现

<think>我们正在处理一个MySQL数据库连接错误,具体是"Access denied for user 'root'@'localhost' (using password: YES)",并且需要重置root密码。 根据引用[1]:这个错误表示使用了错误的root密码。 引用[2]提到尝试重置root密码,并指向了一个社区帮助wiki(MysqlPasswordReset)。 引用[3]提到了一个错误#2000,并建议使用管理工具重置密码,使用命令`SET PASSWORD = PASSWORD('your_existing_password')`,同时提到了旧的不安全认证问题,可能需要从my.cnf中移除old-passwords标志。 引用[4]提到以root登录并创建新用户后需要授权。 引用[5]显示root用户有所有权限。 但是,我们现在的问题是root密码拒绝,所以我们需要重置root密码。由于无法正常登录,我们需要使用安全模式(跳过授权表)来重置密码。 以下是重置root密码的步骤(基于常见的MySQL重置密码方法): 1. 停止MySQL服务。 2. 启动MySQL服务并跳过授权表(这样登录不需要密码)。 3. 连接到MySQL服务器。 4. 更新root密码。 5. 刷新权限并退出。 6. 停止MySQL服务并以正常模式重启。 具体步骤: 步骤1:停止MySQL服务 在Linux上,通常使用: ```bash sudo systemctl stop mysql ``` 或者,根据系统可能是: ```bash sudo service mysql stop ``` 步骤2:以跳过授权表的方式启动MySQL 使用`mysqld_safe`或者直接修改启动参数,但更常见的是: ```bash sudo mysqld_safe --skip-grant-tables & ``` 注意:在某些系统上,可能需要先停止服务再执行此命令。另外,如果使用systemd,可能需要修改配置或使用其他方式。 但是,对于使用systemd的系统,我们可以这样: 编辑MySQL的配置文件(通常是`/etc/mysql/mysql.conf.d/mysqld.cnf`或`/etc/my.cnf`),在`[mysqld]`部分添加: ``` skip-grant-tables ``` 保存后,启动MySQL服务: ```bash sudo systemctl start mysql ``` 步骤3:连接到MySQL服务器 现在,无需密码即可登录: ```bash mysql -u root ``` 步骤4:更新root密码 注意:在MySQL 5.7.6及以上版本,`password`字段已被替换,因此不再使用`PASSWORD()`函数。我们需要根据版本选择合适的方法。 在跳过授权表的情况下,我们可能无法直接使用`ALTER USER`,因为授权表未被加载。因此,我们可以直接更新`mysql.user`表。 首先,刷新权限: ```sql FLUSH PRIVILEGES; ``` 然后,根据版本选择: - 对于MySQL 5.7.6及以上版本,使用: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 或者,如果`ALTER USER`不工作(因为权限表问题),我们可以直接更新`authentication_string`字段: ```sql UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root'; ``` - 对于旧版本(5.7.5及以下): ```sql SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password'); ``` 或者: ```sql UPDATE mysql.user SET Password=PASSWORD('new_password') WHERE User='root'; ``` 注意:在MySQL 8.0中,移除了`PASSWORD()`函数,因此必须使用`ALTER USER`。 另外,引用[3]中提到的不安全认证问题(#2000错误)可能发生在旧版本连接新版本时。如果我们重置密码后仍然遇到连接问题,可能需要考虑使用新的认证方式。在MySQL 8.0中,默认使用`caching_sha2_password`,而旧客户端可能不支持。因此,我们可以选择修改root用户的认证插件(在重置密码后): ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; ``` 步骤5:刷新权限并退出 ```sql FLUSH PRIVILEGES; EXIT; ``` 步骤6:停止MySQL服务,移除配置文件中的`skip-grant-tables`(或注释掉),然后重启MySQL服务。 最后,尝试使用新密码登录: ```bash mysql -u root -p ``` 如果遇到引用[3]中的错误(#2000),在重置密码后,可能需要执行: ```sql SET PASSWORD = PASSWORD('your_existing_password'); ``` 但这是在能够登录的情况下。如果是在旧客户端连接新服务器时,可能需要更新密码的存储方式(如上所述,使用`ALTER USER`修改认证插件)或者更新客户端。 另外,如果重置过程中出现其他问题,请检查错误日志(通常位于`/var/log/mysql/error.log`)。 注意:以上步骤需要系统管理员权限,并且在生产环境中操作需谨慎。 由于不同MySQL版本和操作系统的差异,具体步骤可能略有不同。 现在,生成相关问题:</think>### MySQL root用户访问被拒及密码重置解决方案 当出现`Access denied for user 'root'@'localhost' (using password: YES)`错误时,表示MySQL拒绝了root用户的登录请求。以下是完整的解决方案: --- ### **步骤1:停止MySQL服务** ```bash sudo systemctl stop mysql # Ubuntu/Debian # 或 sudo systemctl stop mysqld # CentOS/RHEL ``` --- ### **步骤2:跳过权限验证启动MySQL** ```bash sudo mysqld_safe --skip-grant-tables --skip-networking & ``` > 此模式允许无密码访问数据库[^2] --- ### **步骤3:无密码登录MySQL** ```bash mysql -u root ``` --- ### **步骤4:重置root密码** 在MySQL命令行中执行(根据版本选择): ```sql /* MySQL 5.7.6+ 或 8.0+ */ FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; /* MySQL 5.7.5 及更早版本 */ UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; ``` > 密码需包含大小写字母、数字和符号,长度至少8位[^4] --- ### **步骤5:重启MySQL服务** ```bash sudo systemctl restart mysql ``` --- ### **步骤6:验证新密码** ```bash mysql -u root -p # 输入新密码登录 ``` --- ### **常见问题排查** 1. **认证协议错误**(如#2000错误): ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; ``` > 解决旧客户端兼容问题[^3] 2. **权限不足**: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 3. **配置文件问题**: 检查`/etc/my.cnf`或`/etc/mysql/my.cnf`中是否包含: ```ini [mysqld] skip-grant-tables # 重置后必须删除此行 ``` --- ### **预防措施** - 定期备份用户权限:`mysqldump --all-databases --no-data > schema.sql` - 创建次级管理员账号: ```sql CREATE USER 'admin'@'localhost' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost'; ``` > **注意**:若使用Docker,需通过`docker exec -it mysql bash`进入容器操作[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值