You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下MS-SQL无法恢复数据库.bak文件问题求助

解决Ubuntu上MS SQL恢复Windows生成的.bak文件时的路径问题

这个问题其实很典型——你用的db.bak应该是从Windows系统的SQL Server导出的备份文件,备份里会记录原数据库的物理文件(MDF数据文件、LDF日志文件)在Windows上的存储路径(比如D:\Program Files\...)。当你在Linux环境的MS SQL里执行恢复命令时,它默认会尝试沿用这个原路径创建文件,但Linux根本没有D盘这回事,所以就会抛出找不到路径的异常。

下面是具体的解决步骤:

1. 先查看备份文件里的文件信息

首先执行这条T-SQL语句,获取备份里包含的逻辑文件名和原物理路径:

RESTORE FILELISTONLY 
FROM DISK = '/var/opt/mssql/backup/db.bak'; -- 替换成你的备份文件实际路径

执行后你会看到结果,重点关注LogicalName(逻辑文件名)和PhysicalName(原Windows路径)这两列。

2. 用MOVE参数指定Linux上的新路径

在恢复时,通过MOVE选项把原Windows路径替换成Ubuntu上MS SQL的合法存储路径(默认数据目录是/var/opt/mssql/data/),示例语句如下:

RESTORE DATABASE YourDatabaseName -- 替换成你要恢复的数据库名
FROM DISK = '/var/opt/mssql/backup/db.bak' -- 备份文件路径
WITH REPLACE,
MOVE 'YourLogicalDataFileName' TO '/var/opt/mssql/data/YourDatabaseName.mdf', -- 替换成第一步查到的逻辑数据文件名
MOVE 'YourLogicalLogFileName' TO '/var/opt/mssql/data/YourDatabaseName.ldf'; -- 替换成第一步查到的逻辑日志文件名
  • 把YourDatabaseName换成你想要的数据库名称;
  • YourLogicalDataFileName和YourLogicalLogFileName要和第一步查询结果里的LogicalName完全匹配;
  • REPLACE参数是为了覆盖同名数据库(如果已经存在的话,按需使用)。

3. 额外注意事项

  • 确保备份文件的权限正确:把db.bak放到/var/opt/mssql/backup/目录下(如果没有就创建),然后修改权限让mssql用户能读取:
    sudo chown mssql:mssql /var/opt/mssql/backup/db.bak
    
  • 关于/var/opt/mssql/mssql.conf:这个配置文件主要用来设置SQL Server的全局参数(比如端口、默认备份目录等),一般不需要修改它来解决这个路径问题,除非你想自定义默认的数据/备份目录,但恢复时指定MOVE是更直接的解决方案。

内容的提问来源于stack exchange,提问作者mbü

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:36:37