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如何查询本机IP地址?命令方法有哪些?

    在Linux系统中,IP地址是设备在网络中的唯一标识,查询本机IP地址是日常运维和网络配置中的基础操作,无论是排查网络问题、配置服务还是进行远程连接,准确获取IP地址都是第一步,Linux查询本机IP的方法多样,可通过命令行工具快速获取,也可通过图形界面直观查看,本文将详细介绍这些方法及适用场景,命令行查询方法……

    2025年10月6日
    800
  • 在Linux系统中如何判断网卡是否处于正常工作状态?

    在Linux系统中,判断网卡是否正常工作需要从多个维度进行综合检查,包括网卡硬件识别、驱动加载状态、链路连通性、网络配置及服务运行状态等,以下是详细的排查步骤和方法,帮助用户全面评估网卡的健康状况,基础识别:确认网卡是否被系统检测到首先需要确认Linux系统是否已识别到网卡硬件,这是判断网卡正常工作的前提,使用……

    2025年8月25日
    3100
  • 软件包如何拷到Linux系统?

    在Linux系统中,将软件包拷贝到本地是常见的操作,无论是安装开源程序、部署应用还是迁移数据,都需要掌握多种拷贝方法,本文将详细介绍通过外部存储设备、网络协议、云存储及命令行工具等不同场景下的软件包拷贝方式,并分析各方法的优缺点及操作步骤,帮助用户根据实际需求选择合适的方案,通过本地外部存储设备拷贝软件包对于离……

    2025年9月28日
    1500
  • 你的日志监控真的发挥价值了吗?

    Linux日志是系统运行的”黑匣子”,记录内核事件、服务状态、用户行为及安全审计信息,有效的日志监控能实现:故障诊断:快速定位服务崩溃、硬件错误根源安全防御:实时检测暴力破解、异常登录、恶意进程性能优化:分析资源瓶颈(如/var/log/syslog中的OOM记录)合规审计:满足GDPR/HIPAA等法规的数据……

    2025年7月26日
    4100
  • 如何查询Linux系统的文件编码?

    在Linux系统中,编码的正确设置和查询至关重要,尤其是在处理多语言文本、文件传输或跨平台操作时,若编码不匹配,常会出现乱码、文件无法读取等问题,本文将详细介绍如何从系统级、文件级、终端级及环境变量等多个维度查询Linux的编码,帮助用户全面掌握编码信息的获取方法,查询系统级默认编码系统级编码是指Linux操作……

    2025年9月17日
    2200

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信