Linux环境下SQL Server 2019开发版还原数据库路径错误问题
报错原因
你使用的备份文件来自Windows环境下的SQL Server实例,备份文件内默认记录了原始数据库的数据文件(.mdf)、日志文件(.ldf)的Windows本地路径(即报错提示的F盘路径)。Linux系统不存在Windows盘符格式的路径,也没有对应的目录结构,因此触发路径查找失败的报错,需要通过WITH MOVE参数手动指定Linux环境下的合法存储路径。
解决步骤
- 第一步:查询备份文件内的逻辑文件名,执行以下命令:
执行后从返回结果中确认sqlcmd -S localhost -U SA -Q "RESTORE FILELISTONLY FROM DISK = N'/var/opt/mssql/data/cliente.bak'"LogicalName列的两个值,正常情况下分别为cliente(数据文件逻辑名)、cliente_log(日志文件逻辑名),后续还原命令需要用到这两个名称。 - 第二步:确认Linux下SQL Server的合法存储目录,默认官方数据目录为
/var/opt/mssql/data/,该目录默认已配置好mssql用户的读写权限,无需额外调整权限。 - 第三步:使用带
WITH MOVE参数的命令执行还原:
说明:sqlcmd -S localhost -U SA -Q "RESTORE DATABASE [prueba] FROM DISK = N'/var/opt/mssql/data/cliente.bak' WITH FILE = 1, MOVE N'cliente' TO N'/var/opt/mssql/data/prueba.mdf', MOVE N'cliente_log' TO N'/var/opt/mssql/data/prueba_log.ldf', NOUNLOAD, REPLACE, NORECOVERY, STATS = 5"MOVE后接第一步查到的逻辑文件名,TO后接Linux环境下的实际存储路径,文件名可根据需求自行修改。 - 第四步:输入SA账户密码等待还原完成即可。
额外注意事项
- 若需自定义存储路径,必须提前将路径的所有者和用户组修改为
mssql,执行命令:chown -R mssql:mssql <自定义目录绝对路径> - 若还原后不需要继续追加事务日志还原,可将命令中的
NORECOVERY参数替换为RECOVERY,还原完成后数据库即可直接正常使用。
内容的提问来源于stack exchange,提问作者Patricio Nicolas
相关产品推荐
相关产品推荐

