数据磁盘满了后增加新硬盘扩展原硬盘软链接(mklink)方案
一、背景:数据库突然写不进数据了
有没有遇到这种场景:
某天数据库突然异常,发现是磁盘空间不足。
再一看,数据库的数据目录或日志目录(比如 D:\Database\Data
)已经塞满了,而你只有另一个磁盘(比如 E:
)还剩大量空间。
如果你正面临以下限制:
- 当前项目已上线,不能修改数据库配置路径
- 数据文件庞大,迁移花时间
- 其他磁盘有空间,但数据库程序只认原路径
别急,一条命令就能解决 —— mklink
。
二、mklink 是什么?
mklink
是 Windows 自带的命令行工具,可以创建软链接(符号链接)。
你可以理解为:创建一个假的文件夹/文件,其实内部指向了另一个路径。
程序会以为你还在用原来的 D:\Database\Data
,但实际上你已经把数据存到了 E:
。
三、实战案例:释放数据库空间
假设数据库的数据目录在:
D:\Database\Data
步骤 1:关闭数据库服务
先停掉数据库服务,防止读写冲突:
net stop mysql # 示例,具体看你的数据库服务名
步骤 2:移动数据目录到新磁盘
move D:\Database\Data E:\DatabaseData
此时,D:\Database\Data
这个原始路径已经空了。
步骤 3:使用 mklink 创建目录符号链接
mklink /D D:\Database\Data E:\DatabaseData
执行后,D:\Database\Data
会变成一个“伪装门口”,实则内部已经跳转到 E:\DatabaseData
。
步骤 4:重启数据库服务
net start mysql
程序和服务丝毫不知情,但你已经巧妙地把数据搬了家。
四、这种做法有什么好处?
✅ 零配置变更:不需要改数据库配置文件
✅ 快速见效:几分钟就能完成整个搬迁
✅ 安全可靠:不影响服务启动、数据访问
✅ 节省磁盘空间:彻底解决“原盘空间打爆”的问题
五、适用于哪些数据库?
这方法适用于大多数部署在 Windows 上的数据库:
- MySQL / MariaDB
- SQL Server
- MongoDB
- PostgreSQL
- SQLite(单文件)
- 甚至本地开发用的轻量级数据库或缓存服务
六、一些注意事项
问题 | 解决方案 |
---|---|
无法创建链接? | 请用「管理员身份」运行 CMD |
移动数据失败? | 确保数据库服务已完全关闭 |
怎么知道链接成功? | 用 dir 命令查看目录类型,应该是 <SYMLINKD> |
删除链接会删数据吗? | 删除链接本身不会删除目标文件夹数据 |
七、拓展场景
你也可以用 mklink
做:
- 日志文件夹转移
- 数据备份目录链接
- 多环境共用配置
- 跨盘共享数据资源
八、总结
磁盘满了不是末日,不一定非得删数据、扩容或重建路径。
在 Windows 下,mklink
是一个老派但实用的武器,能帮你优雅地处理这种临时性资源瓶颈问题。
只需一条命令,你就能把数据“搬走”,而系统、程序、服务完全不知情。
附:mklink 命令语法速查
mklink # 创建文件软链接
mklink /D # 创建目录软链接(最常用)
mklink /J # 创建目录联接(Junction,速度更快)
特性 | mklink /D (目录符号链接) |
mklink /J (目录联接 Junction) |
---|---|---|
支持跨分区 | ✅ 可以指向不同盘符(如 C: → D:) | ✅ 可以指向不同盘符 |
是否为符号链接(软链接) | ✅ 是 | ❌ 不是(是一种 NTFS 的“挂载”机制) |
是否被识别为链接 | ✅ 是符号链接,部分程序能识别 | ❌ 在大多数程序眼中就是普通目录 |
需要 NTFS 文件系统 | ✅ | ✅ |
权限需求(Win10+) | 需要管理员权限或启用开发者模式 | 管理员权限即可 |
支持远程路径 | ✅ 可以链接网络路径 \server\dir | ❌ 不支持网络路径 |
被删除目录的行为 | 链接仍在,但会提示“目标不存在” | 链接仍在,但访问会报错 |
推荐用途 | 更像 Linux 的软链接,适合跨设备、备份、数据复用等 | 更快更兼容,适合软件目录重定向、大型数据挂载 |