MySQL数据库root密码忘记的三种解决方法
以下是几种常见的修改MySQL默认密码的方法,你可以根据实际的MySQL版本以及使用场景来选择合适的方式进行操作
方法一:使用mysqladmin命令(适用于知道原密码的情况)
1. **登录到MySQL服务器所在的操作系统终端**:如果MySQL安装在本地,直接打开本地终端;如果是远程服务器,通过SSH等方式远程登录到服务器上。
2. **执行命令**:假设当前MySQL服务器运行在本地,且端口为默认的3306,原密码为 `old_password`,要修改为 `new_password`
在终端输入以下命令:
bash mysqladmin -u root -p -h 127.0.0.1 -P 3306 password "new_password"
这里的 `-u` 指定用户名(通常修改密码以 `root` 用户操作比较方便),`-p` 表示需要输入密码(执行命令后会提示输入原密码,输入 `old_password` 即可),`-h` 是指定MySQL服务器的主机地址(如果是本地填 `127.0.0.1` 或者 `localhost`,这里以 `120.0.0.1` 为例),`-P` (注意是大写的 `P`)指定端口号,`password` 后面跟着要设置的新密码(需要用双引号括起来)。
方法二:通过登录MySQL客户端修改(适用于知道原密码或者能无密码登录MySQL的情况)
1. **登录到MySQL客户端**:在终端输入以下命令登录到MySQL(同样以本地服务器、默认端口、`root` 用户为例):
mysql -u root -p
按提示输入原密码(如果当前能无密码登录,直接回车即可),进入MySQL命令行界面。
2. **修改密码语句**:在MySQL命令行界面中,执行以下SQL语句来修改密码(以将 `root` 用户密码修改为 `new_password` 为例):
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
或者使用更现代的语法(MySQL 8.0及以上版本推荐):
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
这里 `root` 是用户名,`localhost` 是允许登录的主机地址(可以根据实际需求修改为 `%` 代表允许从任意主机登录,但出于安全考虑,一般不建议这么做),`new_password` 是要设置的新密码。
修改完成后,可以使用新密码重新登录验证一下。
方法三:忘记原密码时的修改方法(适用于MySQL 5.7及以上版本)
1. **停止MySQL服务**:先关闭正在运行的MySQL服务,在不同的操作系统下关闭服务的命令有所不同,例如在CentOS 7中可以使用 `systemctl stop mysqld` 命令,Ubuntu系统中可以使用 `service mysql stop` 命令等。
2. **添加启动参数并重启MySQL**:找到MySQL的配置文件(通常是 `/etc/mysql/my.cnf` 或者 `/etc/my.cnf` 等),在 `[mysqld]` 配置段下添加如下一行内容: skip-grant-tables
这个参数的作用是让MySQL启动时跳过权限验证表,以便可以无密码登录进行密码修改等操作。添加完成后,重启MySQL服务(例如在CentOS 7中用 `systemctl start mysqld` 命令重新启动)。
3. **登录并修改密码**:使用以下命令登录到MySQL客户端(无需密码即可登录):
mysql -uroot
进入命令行界面后,执行以下SQL语句来修改密码(以修改 `root` 用户密码为例,设为 `new_password`):
UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';
对于MySQL 8.0及以上版本,执行语句略有不同:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
4. **恢复正常配置并重启服务**:修改完密码后,再次打开MySQL配置文件,将之前添加的 `skip-grant-tables` 这一行内容删除或者注释掉(在前面添加 `#` 符号),然后重启MySQL服务,使其恢复正常的权限验证机制,之后就可以使用新密码正常登录了。 在修改MySQL密码时,要确保操作符合所在环境的安全策略,同时牢记新设置的密码哦,以免影响后续数据库的正常使用。