mysql重置密码

要区分 MySQL 是通过 systemd 还是传统 service 管理,以及对应的密码重置方案,可按以下步骤操作:

一、如何区分管理方式(systemd 还是传统 service

通过以下命令判断系统默认的服务管理方式:

  1. 检查系统是否使用 systemd

    bash 复制代码
    # 查看系统初始化进程
    ps -p 1 -o comm=
    • 输出 systemd → 系统使用 systemd 管理服务(CentOS 7+ 默认)。
  • 输出 init → 系统使用传统 sysvinit(通过 service 命令管理)。
  1. 验证 MySQL 服务的管理方式

    bash 复制代码
    # 检查是否存在 systemd 服务配置
    ls /usr/lib/systemd/system/mysqld.service
    • 若文件存在 → MySQL 由 systemd 管理(用 systemctl 命令)。
    • 若文件不存在 → 通常由传统 service 命令管理(依赖 /etc/init.d/mysqld 脚本)。

二、方案一:systemd 管理(CentOS 7+,ps -p 1 输出 systemd

1. 停止 MySQL 服务
bash 复制代码
systemctl stop mysqld
2. 配置跳过权限验证
bash 复制代码
# 编辑 MySQL 配置文件
vim /etc/my.cnf

[mysqld] 区块添加:

ini 复制代码
[mysqld]
skip-grant-tables  # 跳过权限表验证

保存退出(vim 中按 :wq)。

3. 重启 MySQL 服务(加载配置)
bash 复制代码
systemctl start mysqld
4. 无密码登录并修改密码
bash 复制代码
# 直接登录(无需密码)
mysql -u root

# 在 MySQL 终端执行
USE mysql;
FLUSH PRIVILEGES;  
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';  # 如:NewPass@2025
exit;
5. 恢复配置并重启服务
bash 复制代码
# 移除跳过权限的配置
vim /etc/my.cnf  # 删除或注释掉 `skip-grant-tables`

# 重启服务
systemctl restart mysqld
6. 验证登录
bash 复制代码
mysql -u root -p  # 输入新密码,成功登录即完成

三、方案二:传统 service 管理(ps -p 1 输出 init

1. 停止 MySQL 服务
bash 复制代码
service mysqld stop
2. 跳过权限验证启动 MySQL
bash 复制代码
# 直接启动服务并跳过权限表(后台运行)
mysqld_safe --skip-grant-tables --user=mysql &

等待 3-5 秒,确认进程启动:

bash 复制代码
ps -ef | grep mysqld_safe  # 能看到进程即表示启动成功
3. 无密码登录并修改密码
bash 复制代码
# 直接登录(无需密码)
mysql -u root

# 在 MySQL 终端执行
USE mysql;
FLUSH PRIVILEGES;  # 刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';  # 如:NewPass@2025
exit;
4. 停止临时进程并正常启动服务
bash 复制代码
# 终止临时启动的 mysqld_safe 进程
ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}' | xargs kill -9

# 用传统方式启动服务
service mysqld start
5. 验证登录
bash 复制代码
mysql -u root -p  # 输入新密码,成功登录即完成

总结

管理方式 系统特征(ps -p 1 服务命令 密码重置核心步骤
systemd 输出 systemd systemctl 编辑 my.cnf 添加 skip-grant-tables
传统 service 输出 init service mysqld_safe --skip-grant-tables 启动

通过系统初始化进程(ps -p 1)可快速区分管理方式,再选择对应的方案即可。两种方式的核心都是"跳过权限验证→修改密码→恢复正常启动"。