服务器测评网
我们一直在努力

在Linux系统里忘记MySQL登录密码了,如何查看配置文件中的密码?

在Linux系统中,MySQL作为常用的关系型数据库,其密码管理是数据库安全的核心环节,由于长期未登录、配置文件变更或人员交接等原因,用户可能会遇到忘记MySQL密码的情况,本文将系统介绍在Linux环境下查看MySQL密码的多种方法,涵盖不同安装方式、权限场景及特殊情况处理,帮助用户高效找回或重置密码,同时强调操作中的安全注意事项。

常见场景分类

在探讨具体方法前,需先明确MySQL在Linux中的安装场景,不同场景下密码存储和查看方式存在差异。

按安装方式划分

  • 包管理器安装:通过Ubuntu/Debian的apt、CentOS/RHEL的yumdnf安装,MySQL配置文件通常位于系统目录(如/etc/mysql//etc/my.cnf),且可能存在系统维护账号(如debian-sys-maint)。
  • 源码编译安装:用户自定义安装路径(如/usr/local/mysql/),配置文件位置可能因编译参数而异,需手动指定。
  • Docker容器安装:MySQL运行于容器中,密码可能通过环境变量(MYSQL_ROOT_PASSWORD)、配置文件挂载或容器内部配置文件存储。

按用户权限划分

  • root用户:拥有系统最高权限,可直接访问所有配置文件和进程,操作简单。
  • 普通用户:需通过sudo提升权限,或依赖用户配置文件(如~/.my.cnf)中的密码信息。
  • 无sudo权限用户:仅能访问自身目录下的配置文件,或通过应用程序连接信息间接获取密码。

按MySQL版本划分

  • 7及以下版本:密码存储在mysql.user表的password字段,可通过UPDATE语句直接修改。
  • 0及以上版本:默认使用caching_sha2_password插件,密码存储在authentication_string字段,且加密方式升级,需通过特定方法重置。

查看密码的具体方法

(一)包管理器安装的MySQL(Ubuntu/Debian)

对于通过apt安装的MySQL,系统默认提供维护账号和配置文件,可通过以下方式查看密码:

  1. 检查系统维护账号密码
    Debian/Ubuntu系统会自动生成debian-sys-maint账号,用于系统服务管理,其密码存储在/etc/mysql/debian.cnf文件中,执行命令:

    cat /etc/mysql/debian.cnf

    输出结果中包含[client]部分的password字段,即为该账号的密码,可通过此账号登录MySQL后,再查询其他用户密码。

  2. 查看配置文件中的密码信息
    MySQL主配置文件通常为/etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf,检查[client][mysql]部分是否有password字段:

    grep -n "password" /etc/mysql/mysql.conf.d/mysqld.cnf

    若配置文件中未明确存储密码,可检查/etc/mysql/conf.d/目录下的其他配置文件。

  3. 通过系统服务日志排查
    若首次安装后未修改密码,MySQL启动日志可能包含临时密码信息,查看日志:

    sudo journalctl -u mysql | grep "temporary password"

    (注:MySQL 5.7首次安装后可能生成临时密码,8.0版本默认不生成,需手动初始化。)

(二)包管理器安装的MySQL(CentOS/RHEL)

通过yumdnf安装的MySQL(如MariaDB),密码查找方式略有不同:

  1. 检查初始密码文件
    MySQL 5.7首次安装后,初始密码可能存储在/root/.mysql_secret文件中:

    cat /root/.mysql_secret

    文件格式通常为# Password set for user 'root@localhost': XXXXXX,提取其中的密码即可。

  2. 查看配置文件
    主配置文件路径为/etc/my.cnf/etc/my.cnf.d/mysql-server.cnf,检查[client]部分的password字段:

    grep -A 5 "\[client\]" /etc/my.cnf
  3. 使用mysql.server脚本
    若MySQL通过mysql.server启动,可通过脚本参数查看配置:

    sudo mysql.server --help | grep "Default options"

    输出的默认配置文件路径中可能包含密码信息。

(三)源码编译安装的MySQL

源码安装的MySQL路径灵活,需根据实际安装位置排查:

  1. 定位配置文件
    源码安装时,配置文件通常位于安装目录/support-files/或用户自定义路径(如/usr/local/mysql/etc/my.cnf),检查my.cnf中的[client]部分:

    grep "password" /usr/local/mysql/etc/my.cnf
  2. 检查启动脚本
    若通过自定义脚本启动(如/usr/local/mysql/bin/mysqld_safe),脚本中可能包含--password参数:

    grep -n "password" /usr/local/mysql/bin/mysqld_safe
  3. 查看用户配置文件
    登录用户的主目录(如~/.my.cnf)可能存储MySQL连接信息:

    cat ~/.my.cnf

(四)Docker容器中的MySQL

对于容器化部署的MySQL,可通过以下方式获取密码:

  1. 查看环境变量
    若通过docker run -e MYSQL_ROOT_PASSWORD=xxxx启动,密码直接在环境变量中:

    docker inspect 容器ID | grep MYSQL_ROOT_PASSWORD
  2. 进入容器查看配置文件
    若密码存储在容器内的配置文件中,需进入容器操作:

    docker exec -it 容器ID /bin/bash
    cat /etc/mysql/my.cnf  # 或容器内的其他配置文件路径
  3. 检查挂载卷
    若配置文件通过-v参数挂载到宿主机,直接查看宿主机对应路径的文件:

    ls -la /path/to/mounted/conf/
    grep "password" /path/to/mounted/conf/my.cnf

(五)root用户直接操作

若当前为root用户,可直接通过MySQL客户端查询用户密码(需先登录或跳过权限表):

  1. 正常登录后查询
    若已知部分密码或可通过维护账号登录,执行:

    SELECT user, host, authentication_string FROM mysql.user WHERE user='root';

    (注:8.0版本中authentication_string字段存储加密后的密码,无法直接解密。)

  2. 跳过权限表重置密码
    若完全忘记密码,可通过以下步骤重置:

    • 停止MySQL服务:sudo systemctl stop mysql
    • 跳过权限表启动:sudo mysqld_safe --skip-grant-tables &
    • 无密码登录MySQL:mysql -u root
    • 更新密码(5.7版本):
      UPDATE mysql.user SET password=PASSWORD('新密码') WHERE user='root';

      (8.0版本):

      UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE user='root';
    • 刷新权限并重启服务:FLUSH PRIVILEGES;,然后sudo systemctl restart mysql

特殊情况处理

密码为空或未设置

若MySQL允许空密码登录,可通过mysql -u root直接进入,若未设置密码,检查配置文件中是否包含skip-grant-tables参数(该参数会跳过权限验证,需谨慎使用)。

使用加密工具存储密码

若通过mysql_config_editor工具存储密码,可查看加密后的登录路径信息:

mysql_config_editor print --login-path=client

执行后会提示输入密码,验证成功后显示登录配置(但不会显示明文密码)。

应用程序连接信息中的密码

若MySQL被应用程序(如WordPress、Java应用)调用,可检查应用程序的配置文件(如wp-config.phpapplication.properties),其中可能包含数据库连接密码。

安全注意事项

  1. 避免明文存储密码:不要在配置文件或脚本中直接明文存储密码,建议使用mysql_config_editor或密钥管理工具。
  2. 定期更换密码:遵循密码复杂度要求(大小写字母+数字+特殊字符),并定期更新。
  3. 限制远程登录:禁止root用户远程登录,仅允许特定IP地址访问数据库。
  4. 操作前备份:重置密码前,务必备份数据库(mysqldump -u root -p 数据库名 > backup.sql),避免数据丢失。
  5. 及时更新版本:MySQL官方定期发布安全补丁,需及时升级至最新稳定版本。

在Linux系统中查看MySQL密码需根据安装方式、用户权限和版本灵活选择方法:包管理器安装的系统可优先检查维护账号和配置文件,源码安装需定位自定义路径,Docker容器则需查看环境变量或挂载卷,若密码完全丢失,可通过跳过权限表重置,无论采用何种方法,均需将安全性放在首位,避免因密码泄露导致数据库风险,通过合理配置和定期维护,可有效保障MySQL数据库的安全稳定运行。

赞(0)
未经允许不得转载:好主机测评网 » 在Linux系统里忘记MySQL登录密码了,如何查看配置文件中的密码?