解决 MySQL 更改数据目录 (datadir) 不生效的终极指南

今天遇到了一个棘手的问题:修改了 MySQL 的 my.ini 配置文件中的 datadir,将数据目录从 C 盘迁移到了 E 盘,但重启 MySQL 服务后,发现 datadir 的值仍然指向原来的 C 盘路径。

经过一番艰苦卓绝的排查,我终于找到了问题的根源,并成功解决了它。

问题描述:

修改了 my.ini 文件中的 datadir 为新的路径 (例如:E:\MySQL\MySQL_Data\Data),重启 MySQL 服务后,通过 SHOW VARIABLES LIKE 'datadir'; 命令查看,发现 datadir 的值仍然是原来的 C 盘路径。

环境:

  • Windows 10/11
  • MySQL 8.0

排查过程及解决方法:

1. 确保 MySQL 服务已彻底停止:

有时候,在服务管理器中简单地 “停止” 和 “启动” 服务并不能完全重启服务,可能还有残留进程或缓存导致旧的配置仍然生效。

  • 解决方法:
    1. 在 “服务” 管理器 (services.msc) 中,停止 “MySQL80” 服务。
    2. 打开任务管理器 (Ctrl + Shift + Esc),切换到 “详细信息” 或 “进程” 标签页。
    3. 找到所有名为 mysqld.exe 的进程,右键点击,选择 “结束进程树”,彻底结束所有 MySQL 相关进程。
    4. 重启电脑(这一步很重要, 可以确保万无一失)

2. 确认 my.ini 文件的位置和内容:

MySQL 启动时会按照一定顺序在几个特定位置寻找 my.ini 文件。一般来说,它会优先加载位于安装目录下的 my.ini,其次是位于数据目录下的 my.ini

  • 默认情况下, my.ini 文件位于隐藏文件夹 C:\ProgramData\MySQL\MySQL Server 8.0\ 中。

  • 如何找到隐藏文件夹?

    1. 打开 “此电脑” 或 “文件资源管理器”。
    2. 点击 “查看” 选项卡。
    3. 勾选 “隐藏的项目”。
    4. 然后你就可以看到 ProgramData 这个文件夹了.
  • 使用管理员权限打开 my.ini 文件进行编辑和保存:

    • 为什么要用管理员权限? 因为 my.ini 文件位于系统目录,需要管理员权限才能修改和保存。
    • 如何以管理员权限打开记事本?
      1. 点击 Windows 开始菜单, 在搜索框中输入 “记事本” 或 “notepad”。
      2. 在搜索结果中,右键点击 “记事本”, 选择 “以管理员身份运行”。
      3. 在弹出的用户账户控制 (UAC) 提示框中,点击 “是”。
      4. 在记事本中,点击 “文件” -> “打开”, 导航到 C:\ProgramData\MySQL\MySQL Server 8.0\ 目录。
      5. 如果看不到 my.ini 文件,将右下角的文件类型从 “文本文档 (.txt)" 改为 "所有文件 (.*)”。
      6. 选择 my.ini 文件,点击 “打开”。
      7. 或者你也可以用Win+R, 然后输入notepad, 按住Ctrl + Shift 键,同时按下 Enter 键, 这样也能以管理员权限打开.
  • 检查 my.ini 文件中的 datadir 配置:

    • 找到 datadir 这一行,确保它指向了你设置的新路径,例如:datadir=E:\MySQL\MySQL_Data\Data
    • 特别注意: 路径中的反斜杠 \ 是否正确,以及路径中是否有多余的空格或字符。
    • 修改完成后,务必点击 “文件” -> “保存”,保存对 my.ini 文件的修改!(很多人会忘记保存, 一定要注意!)

3. 检查 MySQL 服务的用户账户及其权限:

MySQL 服务通常以 “本地系统账户” 或 “Network Service” 账户的身份运行。我们需要确保该账户拥有访问新数据目录的权限。

  • 检查 MySQL 服务的登录账户:

    1. 打开 “服务” 管理器 (services.msc)。
    2. 找到 “MySQL80” 服务,右键点击,选择 “属性”。
    3. 切换到 “登录” 标签页。
    4. 查看 “登录身份” 是哪个账户。
      • 如果是 “本地系统账户”,一般情况下它应该有权限访问 E 盘。
      • 如果是 “Network Service” 账户或者其他用户账户,我们需要确保它拥有访问 “E:\MySQL\MySQL_Data” 文件夹的权限。
  • 为用户账户添加 E 盘权限 (如果必要):

    1. 打开 “E:\MySQL” 文件夹的属性, 右键单击 “MySQL” 文件夹,选择 “属性”。
    2. 切换到 “安全” 标签页。
    3. 点击 “编辑” 按钮。
    4. 如果 “组或用户名” 列表里面没有 NETWORK SERVICE, 点击 “添加” 按钮。
    5. 在 “输入对象名称来选择” 框中,输入 “Network Service” (或者你在上一步看到的 MySQL 服务登录账户), 然后点击检查名称, 再点击确认。
    6. 在 “组或用户名” 列表中,选择 “Network Service” (或者你添加的账户)。
    7. 在 “Network Service 的权限” 列表中,勾选 “完全控制”,然后点击 “确定”。
    8. 点击 “确定”,关闭属性窗口。
    9. 注意: 在应用安全信息到 Data 文件夹时, 可能会弹出"无法枚举容器中的对象。访问被拒绝"的错误, 这是因为你当前的用户账户没有权限修改该文件夹的权限。
      • 解决方法:
        1. 在"MySQL_Data 的权限" 窗口中,点击 “高级” 按钮。
        2. 在"MySQL_Data 的高级安全设置" 窗口中,切换到 “所有者” 标签页。
        3. 点击 “更改” 按钮 (在 “所有者” 后面)。
        4. 在 “选择用户或组” 窗口中, 输入你当前管理员账户的用户名, 点击检查名称, 然后点击 “确定”。如果不知道是哪个, 可以输入 Administrators, 点击检查名称, 然后点击 “确定”.
        5. 勾选 “替换子容器和对象的所有者”,然后点击 “应用”。
        6. 在弹出的 “Windows 安全” 窗口中,点击 “是”。
        7. 等待应用更改所有者, 这可能需要一些时间。
        8. 完成后,关闭 “MySQL_Data 的高级安全设置” 窗口。
        9. 现在,重新尝试给 “NETWORK SERVICE” 账户添加 “完全控制” 权限 (按照你之前的步骤)。

4. 更改MySQL80 服务的登录身份为"本地系统账户":

  • 这一步是考虑到"NETWORK SERVICE"账户的权限问题可能比较复杂, 所以直接改成"本地系统账户", 这样通常就不会有权限问题了.
    1. 打开 “服务” 管理器 (services.msc)。
    2. 找到 “MySQL80” 服务,右键点击,选择 “属性”。
    3. 切换到 “登录” 标签页。
    4. 选择 “本地系统账户”,然后勾选下面的 “允许服务与桌面交互”
    5. 点击 “应用”。

5. 启动 MySQL 服务并验证:

  • 在 “服务” 管理器中,启动 “MySQL80” 服务。
  • 使用 MySQL 客户端 (例如 MySQL Workbench 或命令行) 连接到 MySQL 服务器。
  • 执行 SHOW VARIABLES LIKE 'datadir'; 命令,查看 datadir 的值是否已经更改为新的 E 盘路径。

总结:

修改 MySQL 数据目录不生效的问题,通常是由于权限问题配置没有正确保存服务没有彻底重启导致的。通过以上步骤,我们可以逐一排查并解决这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值