在Linux系统中,LNMP(Linux+Nginx+MySQL+PHP)是一种常见的服务器环境配置,当需要增强安全性或遗忘密码时,修改MySQL数据库密码是一项重要操作,以下是详细的操作步骤和注意事项,帮助您顺利完成密码修改。

准备工作:确认环境与权限
在开始操作前,请确保您已具备以下条件:
- 服务器访问权限:能够通过SSH登录到Linux服务器。
- MySQL管理员权限:默认为root用户,或拥有足够权限的其他用户。
- 当前密码信息:若为首次修改,需知道初始密码;若为重置,可能需要跳过权限验证(需谨慎操作)。
可通过以下命令检查MySQL是否运行:
systemctl status mysql
若未运行,使用systemctl start mysql启动服务。
通过MySQL命令行修改密码(已知当前密码)
如果记得当前密码,这是最推荐的安全方式。
登录MySQL
打开终端,输入以下命令(替换your_password为当前密码):
mysql -u root -p
输入密码后进入MySQL命令行界面。
选择数据库并修改密码
MySQL的权限信息存储在mysql数据库的user表中,执行以下SQL命令:

USE mysql;
UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
new_password为您设置的新密码。PASSWORD()函数会对密码进行加密存储,FLUSH PRIVILEGES使修改立即生效。
验证并退出
输入以下命令检查修改是否成功:
SELECT User, Password FROM user WHERE User='root';
确认无误后,输入EXIT;退出MySQL。
重启MySQL服务(可选)
部分系统可能需要重启服务以确保完全生效:
systemctl restart mysql
通过配置文件跳过权限验证(遗忘密码时)
若忘记当前密码,可通过临时跳过权限验证重置密码,但需注意安全性风险。
停止MySQL服务
systemctl stop mysql
跳过权限表启动
编辑MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf(路径可能因系统而异),在[mysqld]段落下添加:
skip-grant-tables
保存后,以安全模式启动MySQL:

mysqld_safe --skip-grant-tables &
无密码登录并修改
此时可直接输入mysql进入命令行,无需密码,执行以下命令(注意不同版本语法差异):
USE mysql;
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
注意:MySQL 5.7及以上版本使用authentication_string字段存储密码,而非password。
恢复配置并重启
- 删除
/etc/mysql/mysql.conf.d/mysqld.cnf中添加的skip-grant-tables行。 - 终止安全模式进程:
pkill mysqld
- 重启MySQL服务:
systemctl start mysql
通过phpMyAdmin修改(图形化界面)
若已安装phpMyAdmin,可通过网页界面操作:
- 登录phpMyAdmin,点击顶部“用户账户”选项卡。
- 在“本地”用户列表中找到root用户,点击“编辑权限”。
- 在“更改密码”字段输入新密码,选择“使用MySQL密码加密”方式。
- 点击“执行”保存更改。
常见问题与注意事项
- 密码复杂度要求:建议使用包含大小写字母、数字和特殊符号的组合,长度至少8位。
- 权限范围:若仅需修改特定数据库用户密码,请在
UPDATE命令中指定User和Host字段(如Host='localhost')。 - 备份操作:修改前建议备份
mysql数据库:mysqldump -u root -p mysql > mysql_backup.sql
相关问答FAQs
Q1: 修改密码后无法登录,提示“Access denied”怎么办?
A: 可能原因包括:密码未正确加密(未使用PASSWORD()函数)、FLUSH PRIVILEGES未执行,或Host字段不匹配(如需远程登录,需检查Host是否为),可通过方法二跳过权限验证排查。
Q2: 如何修改非root用户的数据库密码?
A: 假设要修改用户db_user的密码,登录MySQL后执行:
UPDATE user SET password=PASSWORD('new_password') WHERE User='db_user' AND Host='localhost';
FLUSH PRIVILEGES;
完成后需授予该用户对特定数据库的权限(如GRANT ALL ON database_name.* TO 'db_user'@'localhost';)。