MySQL—密码设置相关

发布于:2025-02-28 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、忘记密码

方法一:以安全模式启动mysql

步骤一:停止mysql服务

停止 MySQL 服务:打开终端,输入以下命令停止 MySQL 服务(根据你的系统和 MySQL 版本,命令可能有所不同):

systemctl stop mysqld

步骤二:以安全模式启动 MySQL

输入以下命令以安全模式启动 MySQL,跳过权限验证:

sudo mysqld_safe --skip-grant-tables &

& 符号表示在后台运行该进程。

步骤三:登录 MySQL

打开另一个终端窗口,输入 mysql 并回车,无需密码即可登录到 MySQL 服务器。


步骤四:修改密码

在 MySQL 命令行中,执行以下语句来修改密码(以 MySQL 8.0 为例):

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

将新密码替换为实际密码。


步骤五:重启 MySQL

sudo systemctl start mysqld

步骤六:查看新密码设置是否正常

#登录
mysql -h 127.0.0.1 -uroot -p

方法二:通过在配置文件中添加skip-grant-tables参数进行修改

步骤一:停止MySQL服务


打开终端,使用管理员权限(通常需要 sudo)停止 MySQL 服务。对于使用 systemd 管理服务的系统(如大多数现代 Linux 发行版),可以执行以下命令:

sudo systemctl stop mysqld

步骤二:编辑MySQL配置文件


找到MySQL的配置文件,通常是my.cnf或 my.ini(在 Linux 系统中一般位于/etc/目录下)

vim /etc/my.cnf
[mysqld]
skip-grant-tables
# 其他配置项...

步骤三:启动 MySQL 服务


重新启动 MySQL 服务,使其加载新的配置:

systemctl start mysqld

步骤四:登录MySQL数据库


打开终端,直接输入 mysql 命令,此时不需要密码即可登录到 MySQL 服务器:

mysql

步骤五:修改密码


在 MySQL 命令行中,切换到 mysql 数据库(因为用户密码信息存储在该数据库中),然后使用 ALTER USER 语句修改密码。对于 MySQL 8.0 及以上版本,示例如下:

USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

将新密码替换为你想要设置的实际密码。FLUSH PRIVILEGES 语句用于刷新权限表,使新密码立即生效。

步骤六: 恢复配置文件并重启 MySQL

#去掉配置文件中的skip-grant-tables
vim /etc/my.cnf
[mysqld]
skip-grant-tables      #删除此行
# 其他配置项...

#重启mysql服务
systemctl restart mysqld

步骤七:验证新密码登录是否正常

#登录
mysql -h 127.0.0.1 -uroot -p

二、修改密码

方法一:使用 ALTER USER 语句(已登录且有权限)

#修改密码

-- 切换到 mysql 数据库,因为用户和权限信息存储在该数据库中
USE mysql;

-- 修改 root 用户在本地登录(localhost)时的密码,新密码为 'newpassword'
-- 你需要将 'newpassword' 替换为你实际想要设置的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

-- 刷新权限,使新密码立即生效
FLUSH PRIVILEGES;

方法二:使用 SET PASSWORD 语句(已登录且有权限)

-- 修改当前登录用户的密码,新密码为 'newpassword'
-- 你需要将 'newpassword' 替换为你实际想要设置的密码
SET PASSWORD = PASSWORD('newpassword');

-- 如果你想修改其他用户的密码(需有相应权限)
-- 例如修改 root 用户在本地登录(localhost)时的密码
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpassword');

三、设置密码为永不过期

1、password_lifetime值的含义

password_lifetime值为null和0
在数据库管理中, password_lifetime 是一个常见的安全参数,用于指定密码的有效期。如果  password_lifetime 的值为  NULL 或  0,它们可能代表不同的含义:
  • NULL
 表示没有设置密码有效期限制。密码可以使用无限期。
  • 0
 表示密码不会过期。这通常意味着强密码策略不会被应用。
  password_lifetime 的值是一个正整数,表示密码应该被要求更改之前的最大天数。
  password_lifetime 设置为  0,或者根本不设置此参数。
以 SQL Server 为例,设置密码有效期为 90 天:
ALTER LOGIN [your_login] WITH PASSWORD = 'new_password', PASSWORD_LIFETIME = 90;
禁用密码过期:
ALTER LOGIN [your_login] WITH PASSWORD = 'new_password', PASSWORD_LIFETIME = 0;

2、不同版本的MySQL设置密码永不过期的方法不同

2.1、MySQL 8.0及以上版本

以拥有足够权限的用户(如 root)登录 MySQL 数据库:

USE mysql;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;

2.2、MySQL 5.7版本

USE mysql;
SELECT User, Host, password_expired FROM mysql.user WHERE User = 'root' AND Host = 'localhost';
UPDATE mysql.user SET password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

2.3、以5.7版本为例进行修改

步骤一:查看用户是否设置密码过期的sql

 SELECT user, host, password_expired, password_lifetime FROM mysql.user WHERE user = 'root';

步骤二:修改为永不过期

ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'127.0.0.1' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'stc'@'%' PASSWORD EXPIRE NEVER;


网站公告

今日签到

点亮在社区的每一天
去签到