要区分 MySQL 是通过 systemd
还是传统 service
管理,以及对应的密码重置方案,可按以下步骤操作:
一、如何区分管理方式(systemd
还是传统 service
)
通过以下命令判断系统默认的服务管理方式:
-
检查系统是否使用
systemd
# 查看系统初始化进程 ps -p 1 -o comm=
- 输出
systemd
→ 系统使用systemd
管理服务(CentOS 7+ 默认)。
- 输出
- 输出
init
→ 系统使用传统sysvinit
(通过service
命令管理)。
-
验证 MySQL 服务的管理方式
# 检查是否存在 systemd 服务配置 ls /usr/lib/systemd/system/mysqld.service
- 若文件存在 → MySQL 由
systemd
管理(用systemctl
命令)。 - 若文件不存在 → 通常由传统
service
命令管理(依赖/etc/init.d/mysqld
脚本)。
- 若文件存在 → MySQL 由
二、方案一:systemd
管理(CentOS 7+,ps -p 1
输出 systemd
)
1. 停止 MySQL 服务
systemctl stop mysqld
2. 配置跳过权限验证
# 编辑 MySQL 配置文件
vim /etc/my.cnf
在 [mysqld]
区块添加:
[mysqld]
skip-grant-tables # 跳过权限表验证
保存退出(vim
中按 :wq
)。
3. 重启 MySQL 服务(加载配置)
systemctl start mysqld
4. 无密码登录并修改密码
# 直接登录(无需密码)
mysql -u root# 在 MySQL 终端执行
USE mysql;
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; # 如:NewPass@2025
exit;
5. 恢复配置并重启服务
# 移除跳过权限的配置
vim /etc/my.cnf # 删除或注释掉 `skip-grant-tables`# 重启服务
systemctl restart mysqld
6. 验证登录
mysql -u root -p # 输入新密码,成功登录即完成
三、方案二:传统 service
管理(ps -p 1
输出 init
)
1. 停止 MySQL 服务
service mysqld stop
2. 跳过权限验证启动 MySQL
# 直接启动服务并跳过权限表(后台运行)
mysqld_safe --skip-grant-tables --user=mysql &
等待 3-5 秒,确认进程启动:
ps -ef | grep mysqld_safe # 能看到进程即表示启动成功
3. 无密码登录并修改密码
# 直接登录(无需密码)
mysql -u root# 在 MySQL 终端执行
USE mysql;
FLUSH PRIVILEGES; # 刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; # 如:NewPass@2025
exit;
4. 停止临时进程并正常启动服务
# 终止临时启动的 mysqld_safe 进程
ps -ef | grep mysqld_safe | grep -v grep | awk '{print $2}' | xargs kill -9# 用传统方式启动服务
service mysqld start
5. 验证登录
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
)可快速区分管理方式,再选择对应的方案即可。两种方式的核心都是“跳过权限验证→修改密码→恢复正常启动”。