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ü
相关产品推荐
相关产品推荐

