MySQL修改密码(三种方法示例)

在本教程中,您将学习如何使用以下几种方式:UPDATE,SET PASSWORD和ALTER USER语句来更改MySQL用户密码。
在更改MySQL用户帐户的密码之前,应该要先考虑以下几个问题:

要更改密码是哪个用户帐号?什么应用程序正在使用要被更改密码的用户帐户? 如果您更改密码而不更改正在使用用户帐户的应用程序的连接字符串,则应用程序将无法连接到数据库服务器。
清楚上面这些问题后,就可以开始更改用户帐户的密码了。
MySQL提供了各种可用于更改用户密码的语句,包括UPDATE,SET PASSWORD和GRANT USAGE语句。
方法1:使用UPDATE语句更改MySQL用户密码更改密码的第一种方法是使用UPDATE语句来更新mysql数据库的user表。
执行UPDATE语句后,还需要执行FLUSH PRIVILEGES语句,从mysql数据库中的授权表中重新加载权限。
假设要更改从localhost主机连接的dbadmin用户的密码为:newpasswd,则可执行以下语句:

注意:MySQL 5.7.6版本以下,才能使用此方法来修改密码。从MySQL 5.7.6版本起,user表仅使用authentication_string列代替之前版本中的password列来存储密码。此外,它删除了password列。

USE mysql;

UPDATE user 
SET password = PASSWORD('newpasswd')
WHERE user = 'dbadmin' AND 
      host = 'localhost';

FLUSH PRIVILEGES;

因此,如果使用MySQL 5.7.6+版本以上,则必须在UPDATE语句中使用authentication_string列代替password列:

USE mysql;

UPDATE user 
SET authentication_string = PASSWORD('newpasswd')
WHERE user = 'dbadmin' AND 
      host = 'localhost';

FLUSH PRIVILEGES;

请注意,PASSWORD()函数将纯文本字符串密码形式计算加密成哈希值。
方法2:使用SET PASSWORD语句更改MySQL用户密码更改密码的第二种方法是使用SET PASSWORD语句。
您可以使用user@host格式的用户帐户更新密码。如果需要更改其他帐户的密码,则当前登录的帐户至少需要UPDATE权限。
以下语句使用SET PASSWORD语句更改dbadmin用户帐户的密码。

SET PASSWORD FOR 'dbadmin'@'localhost' = PASSWORD('newpasswd2');

请注意,从MySQL 5.7.6版本开始,MySQL不推荐使用此语法,可能会在将来的版本中将其删除。作为一个代替的解决方案,它使用明文密码如下:

SET PASSWORD FOR 'dbadmin'@'localhost' = 'newpasswd2';

方法3:使用ALTER USER语句更改MySQL用户密码更改用户帐户密码的第三种方法是将ALTER USER语句与IDENTIFIED BY子句一起使用。
以下ALTER USER语句将dbadmin用户的密码更改为newpasswd3:

ALTER USER dbadmin@localhost IDENTIFIED BY 'newpasswd3';

执行上面修改密码的语句后,可尝试验证修改结果,使用新密码登录 -

C:\Users\Administrator>mysql -hlocalhost -udbadmin -p

如果要重置MySQL的root帐户的密码,则需要强制MySQL数据库服务器停止并重新启动,而无需使用授权表验证。
在本教程中,我们向您介绍了一些方便的语句,允许您更改MySQL数据库中用户帐户的密码。
参考:http://dev.mysql.com/doc/refman/5.7/en/set-password.html

<think>好的,我需要帮助用户在CentOS 7上重置MySQL数据库密码。根据用户提供的引用资料,我需要整理出详细的步骤,并确保每个步骤都正确无误。首先,用户可能需要停止MySQL服务,以跳过权限检查的方式启动MySQL。然后,使用无密码登录修改密码,最后恢复服务并测试新密码。 首先,验证用户是否使用的是CentOS 7,因为不同版本的系统命令可能不同。确认用户已经安装了MySQL,并且是root用户或者有sudo权限。接下来,根据引用[2],停止MySQL服务:`sudo systemctl stop mysqld`或者`service mysqld stop`,这取决于系统使用的初始化系统是systemd还是SysVinit。不过,CentOS 7通常使用systemctl,所以可能需要调整命令。 然后,启动MySQL并跳过权限表,引用[2]提到使用`mysqld_safe --skip-grant-tables &`,但需要注意是否有mysqld_safe可用,或者是否应该使用其他方法。在较新的MySQL版本中,可能需要使用`mysqld --skip-grant-tables --skip-networking &`来增强安全性,避免远程访问。同时,用户需要另开终端登录MySQL,这时候不需要密码,可以直接用`mysql -u root`进入。 接下来,根据引用[3]和[4],更新密码的方式可能不同。旧版本使用`update mysql.user set authentication_string=password('新密码') where user='root';`而新版本(如MySQL 5.7及以上)可能需要使用`ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';`。需要注意如果用户安装的是MariaDB,命令可能有所不同。此外,执行这些命令后需要刷新权限:`flush privileges;`然后退出。 之后,停止MySQL进程,并正常重启服务。可能需要使用`sudo systemctl restart mysqld`,然后测试新密码是否生效。如果遇到密码策略问题,可能需要临时禁用验证策略,如引用[4]中的步骤,修改密码后再重新启用。另外,如果用户需要远程访问,可能需要开放端口和关闭防火墙,如引用[2]提到的,但这不是重置密码的直接步骤,但用户可能需要这方面的帮助,可以考虑在相关问题中提到。 需要检查每个步骤的正确性,例如是否正确停止服务,启动时是否正确跳过了权限表,以及密码修改命令是否适用于用户MySQL版本。另外,确保用户在执行这些命令时有足够的权限,可能需要使用sudo。同时,提醒用户在操作前备份数据,以防万一。</think>### 逐步重置 CentOS 7 中 MySQL 密码的步骤 1. **停止 MySQL 服务** 通过以下命令关闭 MySQL 服务(根据系统初始化方式选择): ```bash sudo systemctl stop mysqld # 适用于 systemd 系统 # 或 sudo service mysqld stop # 适用于 SysVinit 系统 ``` 2. **以无权限验证模式启动 MySQL** 跳过权限验证并启动 MySQL 后台进程: ```bash sudo mysqld_safe --skip-grant-tables --skip-networking & ``` 注意:若提示找不到 `mysqld_safe`,尝试改用 `mysqld` 命令。 3. **无密码登录 MySQL** 打开新终端窗口,直接登录 MySQL: ```bash mysql -u root ``` 4. **修改 root 用户密码** **根据 MySQL 版本选择对应方法:** - **MySQL 5.7 及以上或 MariaDB 10.4+** ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; FLUSH PRIVILEGES; ``` - **旧版本 MySQL(如 5.6)** ```sql UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; ``` 5. **退出并重启 MySQL 服务** ```sql exit; ``` 终止 MySQL 进程后正常重启服务: ```bash sudo killall mysqld # 结束无权限验证进程 sudo systemctl start mysqld ``` 6. **验证新密码** ```bash mysql -u root -p ``` 输入新密码,确认登录成功。 --- ### 常见问题解决 - **密码策略限制** 若密码强度不足,临时禁用验证策略(仅限测试环境): ```sql SET GLOBAL validate_password_policy=0; ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码'; ``` - **远程访问配置** 如需远程连接,需开放端口并配置用户权限: ```bash sudo firewall-cmd --permanent --add-port=3306/tcp # 开放 3306 端口 sudo firewall-cmd --reload ``` 在 MySQL 中执行: ```sql CREATE USER 'root'@'%' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; FLUSH PRIVILEGES; ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值