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

相关推荐

  • Ubuntu升级后系统崩溃?如何避免

    Linux perf 是 Linux 内核内置的性能分析工具(全称 Performance Counters for Linux),它直接利用 CPU 的性能监控单元(PMU)和内核跟踪点,提供低开销、高精度的性能数据采集能力,无论是分析 CPU 瓶颈、内存访问、函数调用关系还是系统调用,perf 都是 Lin……

    2025年6月20日
    9400
  • 如何用U盘启动Linux?具体操作步骤有哪些?

    要用U盘启动Linux,需经历准备阶段、制作启动盘、设置BIOS/UEFI、启动安装等步骤,以下是详细操作指南:准备阶段下载Linux镜像文件:访问Linux发行版官网(如Ubuntu、Fedora、Deepin等),下载ISO镜像文件(推荐选择LTS长期支持版本,更稳定),确保镜像完整,可通过校验和(如SHA……

    2025年9月20日
    7700
  • Linux如何安装flush工具?

    在Linux系统中,缓存管理是优化系统性能的重要环节,而flush工具作为一款轻量级的缓存清理工具,能够帮助用户快速释放页面缓存、目录项缓存(dentries)和inode缓存,从而提升磁盘I/O效率或解决因缓存占用过高导致的性能问题,本文将详细介绍flush工具在不同Linux发行版中的安装方法、配置步骤及使……

    2025年9月18日
    7500
  • Linux如何更改文件后缀名?具体操作步骤是什么?

    在Linux系统中,文件后缀名(扩展名)虽然不强制要求文件必须遵循,但它是系统和应用程序识别文件类型的重要依据,txt通常表示文本文件,.png表示图片文件,更改文件后缀名是常见的文件管理操作,可能用于修复文件类型错误、统一文件格式、适配特定程序需求等,本文将详细介绍Linux中更改文件后缀名的多种方法,涵盖命……

    2025年9月19日
    6400
  • 如何查看Linux系统当前是否已连接到网络?

    在Linux系统中,判断网络是否正常工作需要从多个维度进行检查,包括网络接口状态、IP配置、连通性、DNS解析、网络连接等,以下将详细介绍常用的检查方法和命令,帮助用户全面排查网络问题,使用ping命令测试基本连通性ping是最基础的网络测试工具,通过向目标主机发送ICMP回显请求并接收响应,判断网络是否可达……

    2025年10月3日
    8500

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信