Linux下如何修改MySQL密码的详细操作步骤与方法?

在Linux环境下修改MySQL密码是数据库管理中的常见操作,根据是否已知当前密码、MySQL版本(如5.7、8.0)及安装方式(源码、包管理器等),操作步骤存在差异,本文将详细介绍不同场景下的密码修改方法,并涵盖注意事项及问题排查。

linux下如何修改mysql密码

修改密码前的准备工作

  1. 确认MySQL服务状态
    确保MySQL服务正在运行,可通过以下命令检查:

    systemctl status mysqld  # CentOS 7+/Ubuntu 16.04+
    service mysql status      # CentOS 6及更早版本

    若服务未运行,需先启动:systemctl start mysqldservice mysql start

  2. 确认登录权限
    若已知当前密码,可直接登录;若忘记密码,需跳过权限表(后文详述),登录命令:

    mysql -u root -p  # 输入当前密码后进入MySQL
  3. 备份重要数据
    修改密码前建议备份数据库,避免操作失误导致数据丢失:

    mysqldump -u root -p --all-databases > backup.sql

已知当前密码时修改MySQL密码

(一)使用mysqladmin命令(适用于所有版本)

mysqladmin是MySQL自带的客户端管理工具,可通过命令行快速修改密码。
基本语法

mysqladmin -u 用户名 -p旧密码 password 新密码

示例(修改root用户密码)

mysqladmin -u root -poldpass password "NewPass123!"

注意事项

  • 旧密码需正确输入,若旧密码为空(如首次安装后),可省略-p旧密码参数,但需在交互提示中输入空密码。
  • 新密码需符合MySQL的密码策略(如长度、字符类型),可通过SHOW VARIABLES LIKE 'validate_password%';查看策略规则。

(二)通过SQL命令修改(区分版本)

MySQL 5.7及以下版本

7版本中,用户密码存储在mysql.user表的authentication_string字段(早期版本为password字段)。
操作步骤
(1)登录MySQL:

mysql -u root -p

(2)选择数据库:

USE mysql;

(3)更新密码:

UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root' AND Host='localhost';

(4)刷新权限使修改生效:

FLUSH PRIVILEGES;

(5)退出MySQL:

linux下如何修改mysql密码

EXIT;

MySQL 8.0及以上版本

版本对密码管理进行了优化,弃用了PASSWORD()函数,改使用ALTER USER语句,且认证插件默认为caching_sha2_password
操作步骤
(1)登录MySQL:

mysql -u root -p

(2)直接使用ALTER USER修改密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

(3)刷新权限(可选,ALTER USER会自动刷新):

FLUSH PRIVILEGES;

注意事项

  • 0版本若仍使用UPDATE语句修改密码,可能会提示“Unknown column ‘password’ in ‘field list’”(因password字段已被移除)。
  • 若需指定认证插件,可添加WITH mysql_native_password(如兼容旧版客户端):
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

忘记root密码时修改MySQL密码

若忘记root密码,需通过“跳过权限表”的方式启动MySQL,无密码登录后修改密码。操作前需停止MySQL服务,并修改配置文件,步骤如下:

(一)修改MySQL配置文件

  1. 停止MySQL服务

    systemctl stop mysqld  # 或 service mysql stop
  2. 编辑配置文件

    • 使用vim打开MySQL主配置文件(路径可能因安装方式不同而异,常见路径:/etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf):
      vim /etc/my.cnf
    • [mysqld]段落下添加以下参数,跳过权限表验证:
      [mysqld]
      skip-grant-tables
    • 保存并退出(wq)。
  3. 启动MySQL服务(跳过权限表)

    systemctl start mysqld  # 或 service mysql start

(二)无密码登录并修改密码

  1. 登录MySQL(无需输入密码)

    mysql -u root
  2. 修改root密码(区分版本)

    • MySQL 5.7及以下版本
      USE mysql;
      UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root';
      FLUSH PRIVILEGES;
    • MySQL 8.0及以上版本
      -- 首先刷新权限(跳过权限表启动后需手动刷新)
      FLUSH PRIVILEGES;
      -- 修改密码
      ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
  3. 退出MySQL

    EXIT;

(三)恢复配置并重启服务

  1. 注释或删除跳过权限表的配置
    再次编辑/etc/my.cnf文件,将skip-grant-tables参数注释或删除:

    linux下如何修改mysql密码

    [mysqld]
    # skip-grant-tables

    保存并退出。

  2. 重启MySQL服务

    systemctl restart mysqld  # 或 service mysql restart
  3. 验证新密码

    mysql -u root -p

    输入新密码,若成功登录则表示修改成功。

不同版本修改命令对比

操作场景 MySQL 5.7及以下版本 MySQL 8.0及以上版本
已知密码(SQL命令) UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root'; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
忘记密码(无密码登录后) 需先FLUSH PRIVILEGES,再执行UPDATE语句 需先FLUSH PRIVILEGES,再执行ALTER USER语句
指定认证插件 UPDATE user SET authentication_string=PASSWORD('新密码') WHERE User='root'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

注意事项

  1. 密码复杂度
    MySQL默认密码策略要求密码包含大小写字母、数字及特殊字符,长度至少8位,可通过以下命令查看或修改策略:

    -- 查看密码策略(8.0版本)
    SHOW VARIABLES LIKE 'validate_password%';
    -- 修改密码长度要求(8.0版本)
    SET GLOBAL validate_password.length=6;
  2. 主机名权限
    若需从远程主机登录,需修改Host字段为(允许所有主机)或指定IP:

    UPDATE user SET Host='%' WHERE User='root';
    FLUSH PRIVILEGES;

    注意:生产环境不建议开放,应限制为特定IP。

  3. 配置文件权限
    修改/etc/my.cnf时需确保文件权限正确(通常为644,属主为root):

    chmod 644 /etc/my.cnf
    chown root:root /etc/my.cnf

相关问答FAQs

问题1:修改MySQL密码后,使用新密码登录仍提示“Access denied for user ‘root’@’localhost’”,如何解决?
解答
可能原因及解决方法:

  1. 未刷新权限:执行FLUSH PRIVILEGES;使修改生效。
  2. 主机名不匹配:检查mysql.user表中root用户的Host字段是否为localhost(本地登录)或允许的IP,若需远程登录,需修改Host为对应IP或。
  3. 密码复杂度不满足:通过SHOW VARIABLES LIKE 'validate_password%';查看密码策略,确保新密码符合要求。
  4. 服务未重启:若修改了配置文件(如跳过权限表后恢复),需重启MySQL服务。

问题2:在MySQL 8.0中使用UPDATE user SET password=PASSWORD('newpass') WHERE User='root';修改密码失败,提示“Unknown column ‘password’ in ‘field list’”,如何处理?
解答
MySQL 8.0版本已移除mysql.user表中的password字段,改用authentication_string存储密码哈希值,正确的修改方式为:

-- 1. 刷新权限(跳过权限表启动后需执行)
FLUSH PRIVILEGES;
-- 2. 使用ALTER USER语句修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';

若需兼容旧版客户端(如某些PHP程序),可指定认证插件为mysql_native_password

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpass';

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/33318.html

(0)
酷番叔酷番叔
上一篇 2025年9月30日 19:33
下一篇 2025年9月30日 19:46

相关推荐

  • linux系统如何配置网络连接

    Linux 系统中,可通过图形界面网络设置或命令行(如 ifconfig、ip 等

    2025年8月16日
    4900
  • Linux网关信息如何查看?

    使用 ip route 命令(推荐)适用场景:现代Linux发行版(CentOS 7+/Ubuntu 18.04+)步骤:打开终端,执行: ip route show default或简写为:ip r输出解析: default via 192.168.1.1 dev eth0 proto static metr……

    2025年7月19日
    7200
  • Linux系统中如何彻底卸载SVN及清除残留配置文件?

    在Linux系统中,卸载Subversion(SVN)通常涉及两个核心步骤:通过包管理器移除已安装的SVN软件包,以及手动清理可能残留的配置文件、数据目录和相关依赖,SVN作为版本控制工具,若不再使用或需要替换为其他工具(如Git),彻底卸载可释放系统资源并避免潜在冲突,以下将分场景详细说明卸载流程,涵盖主流L……

    2025年9月23日
    3800
  • 如何打包当前目录所有文件?

    在Linux系统中,表示当前目录是文件操作和命令行导航的基础概念,当前目录(Current Working Directory)指用户或程序正在操作的位置,类似于Windows中的“打开文件夹”,正确理解其表示方法能避免路径错误,提升命令执行效率,以下是两种核心表示方式及使用场景:点号 :最简表示法点号是Lin……

    2025年7月6日
    7900
  • Linux系统启动的详细步骤是怎样的?

    Linux系统的启动是一个涉及硬件、固件和软件协同工作的复杂过程,从用户按下电源键到最终进入用户界面,经历了一系列精心设计的初始化阶段,理解这一流程不仅有助于系统管理,也能在出现启动故障时快速定位问题,以下从硬件加电开始,逐步拆解Linux系统的完整启动链路,电源开启与BIOS/UEFI初始化按下电源键后,计算……

    2025年9月22日
    3900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信