mysql数据库改root密码出现错误

本文介绍在CentOS 6.3_x64环境下,当遇到无法使用mysqladmin更改MySQL密码的问题时的一种解决方法。通过停止MySQL服务,然后启动mysqld_safe并跳过权限表,进入MySQL命令行更新root用户的密码。

在centos6.3_x64下安装mysql数据库,在修改密码时:

/usr/bin/mysqladmin -u root password ‘123456’

出现错误:

Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

解决方法:

# service mysqld stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('123456') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# service mysqld start

参考链接:http://www.cnblogs.com/qq78292959/p/3641972.html

<think> 首先,用户查询是:“我想查找解决mysql数据库忘记root密码的方法 请问解决mysql数据库忘记root密码的方法”。这直接请求解决 MySQL 数据库忘记 root 密码的方案。 系统指令要求: - 所有行内数学表达式用 `$...$` 格式(但在这个上下文中,可能不需要数学表达式,因为是关于数据库的)。 - 独立公式用 `$$...$$`(同样,可能不适用)。 - LaTeX语法正确(确保任何公式正确)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾添加引用标识,如 `[^1]`。 - 结构清晰,逐步解决问题,保证真实可靠。 用户提供了几个引用: - 引用[1]:提到忘记密码的背景,旧版本明文存储,新版本加密存储。 - 引用[2]:给出解决方法:修配置文件跳过验证,然后更新密码。 - 引用[3]:使用环境变量设置密码登录。 - 引用[4]:在 CentOS 下获取初始临时密码。 我的回答需要基于这些参考,但参考不是用户真正的需求,我需要参考用户的问题和我的回答。用户的问题是直接的,所以我应该提供解决方案。 关键步骤总结(基于参考[2]和[4]): 1. 停止 MySQL 服务。 2. 修 MySQL 配置文件(如 my.cnf 或 my.ini)以跳过权限检查(添加 `skip-grant-tables`)。 3. 重启 MySQL 服务。 4. 无密码登录 MySQL。 5. 更新 root 密码(使用 `UPDATE mysql.user SET authentication_string=PASSWORD('new_password') WHERE User='root';` 或类似)。 6. 刷新权限并退出。 7. 移除配置文件中的 `skip-grant-tables` 并重启服务。 8. 对于新版本,可能需要处理密码策略或使用初始临时密码(如参考[4])。 参考[3]提到使用环境变量 `MYSQL_PWD`,但这可能不安全,且不是恢复忘记密码的常规方法;它更适用于脚本自动化。 所以,我的回答应该: - 结构化:逐步指导。 - 使用中文。 - 在引用部分添加引用标识。 - 生成相关问题。 结构建议: 1. **简介**:简要解释问题。 2. **步骤**:详细步骤,基于参考。 3. **注意事项**:针对不同 MySQL 版本和安全考虑。 4. **相关问题**:生成相关的问题。 确保真实可靠:基于标准 MySQL 文档和常见实践。参考[2]是标准方法。 添加引用: - 当提到某个点时,添加引用标识,如引用[2]提到修配置文件,所以末尾加 `[^2]`。 最终回答格式: - 以中文书写。 - 可能包括代码块(如 SQL 命令)。 - 结束时生成相关问题。 相关问题生成: - 例如:如何在特定操作系统上操作?新版本 MySQL密码策略?如何安全重置密码? 现在,构建回答。 </think> ### 解决 MySQL 数据库忘记 root 密码的方法 忘记 MySQL root 密码是一个常见问题,尤其是在维护或迁移数据库时。基于您提供的引用和标准 MySQL 实践,我提供以下结构化解决方案。该方法适用于大多数 MySQL 版本(如 MySQL 5.7+ 或 MariaDB),但需注意: - **核心原理**:通过临时跳过权限验证(`skip-grant-tables`)登录数据库,然后更新 root 密码。 - **安全性警告**:此方法涉及修配置文件,操作前备份重要数据。完成后务必恢复配置,避免安全漏洞[^1][^2]。 - **版本差异**:旧版本可能使用明文密码,新版本(≥5.7.6)使用加密存储,命令略有不同[^1]。 #### 详细步骤(以 Linux 系统为例,Windows 类似) 以下步骤基于引用[2]和[4],结合最佳实践确保可靠: 1. **停止 MySQL 服务** - 确保数据库停止运行,以便修配置。 ```bash sudo systemctl stop mysqld # 或 service mysqld stop(适用于旧系统) ``` 2. **编辑 MySQL 配置文件以跳过验证** - 打开配置文件(通常为 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`)。 - 在 `[mysqld]` 部分添加一行 `skip-grant-tables`(这将禁用密码验证)。保存并退出。 ```bash sudo vi /etc/my.cnf # 使用文本编辑器修 ``` 添加内容示例:[^2] ``` [mysqld] skip-grant-tables ``` 3. **重启 MySQL 服务** - 应用新配置。 ```bash sudo systemctl start mysqld # 或 service mysqld start ``` 4. **无密码登录 MySQL** - 现在可直接登录 root 账户。 ```bash mysql -u root ``` 5. **更新 root 密码** - 在 MySQL shell 中执行命令。**注意版本差异**: - **MySQL 5.7.6+ 或 MariaDB 10.4+**:使用 `authentication_string` 字段。 - **旧版本(如 MySQL 5.6)**:使用 `Password` 字段。 ```sql -- 切换到 mysql 数据库 USE mysql; -- 更新密码(替换 'new_password' 为你的新密码) UPDATE user SET authentication_string = PASSWORD('new_password') WHERE User = 'root'; -- 刷新权限并退出 FLUSH PRIVILEGES; EXIT; ``` 如果遇到错误(如新版本的密码策略限制),可能需要先重置策略:[^1] ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 6. **恢复配置文件并重启服务** - 移除 `skip-grant-tables` 行以避免安全问题。 - 重启 MySQL 使更生效。 ```bash sudo vi /etc/my.cnf # 删除 skip-grant-tables 行 sudo systemctl restart mysqld ``` 7. **验证新密码** - 使用新密码登录测试。 ```bash mysql -u root -p # 输入新密码 ``` #### 特殊情况处理 - **新安装的 MySQL 有临时密码**:如果初次安装后忘记密码,参考[4]提到可通过日志文件获取临时密码(适用于 CentOS/RHEL): ```bash grep 'temporary password' /var/log/mysqld.log # 输出中包含初始密码如 "MtPqF0/oN5zo" ``` 登录后立即更密码。 - **使用环境变量(不推荐)**:引用[3]提出设置 `MYSQL_PWD` 环境变量登录,但此方法不安全(密码暴露),仅适用于脚本自动化: ```bash export MYSQL_PWD=your_password mysql -uroot ``` 建议仅在紧急测试时使用,并清除环境变量后[^3]。 #### 注意事项 - **密码策略**:新版本 MySQL 强制要求强密码(如大小写字母、数字、符号)。如果失败,检查错误日志(`/var/log/mysqld.log`)。 - **Windows 系统**:步骤类似,配置文件通常为 `C:\ProgramData\MySQL\MySQL Server 8.0\my.ini`。 - **安全建议**:操作完成后审核数据库权限,确保无未授权访问。定期备份密码以避免遗忘[^1]。 如果以上步骤无效,可能涉及防火墙或权限问题,建议查阅 MySQL 官方文档或提供更多系统细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值