如标题所示,sqlserver的备份文件是由.mdf, .ndf.ldf组成

  • MDF:主要数据文件,primary data file

    主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。

  • NDF:次要数据文件,Secondary data files

    次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。

  • LDF:事务日志,Log data files

    事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。


为了方便,下面使用mdf作为这三种文件的统称

在windows上想读取mdf文件非常简单,装个ssms,甚至sqlserver都直接帮你装好了,用系统用户登陆,直接右键数据库,添加就行。

但如果想在linux服务器上如此操作,则需要手动安装sqlserver然后导入。参考官网的这篇教程

  1. 为了不污染服务器环境,使用docker拉取
1
$ sudo docker pull mcr.microsoft.com/mssql/server:2022-latest
  1. 运行容器,设置磁盘映射,映射到容器的/var/tmp不过貌似有更好的专门的路径
1
$ sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YOUR_PASSWD" -p 1433:1433 --name sqlserver1 --hostname sqlserver1 -v /home/xxx/your/backup/file/path:/var/tmp mcr.microsoft.com/mssql/server:2022-latest
  1. 用root身份进入容器
1
$ sudo docker exec -it sqlserver1 "bash"
  1. 进入后使用sqlcmd命令进入sqlserver,用户名直接用SA,密码在跑容器的时候指定过
1
$ sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "YOUR_PASSWD"
  1. 在sqlserver中用CREATE DATABASE命令创建数据库,并制定文件名,可以写很多个
1
CREATE DATABASE your_dbname ON (FILENAME = '/var/tmp/xxx.MDF'),(FILENAME = '/var/tmp/xxx.ndf') FOR ATTACH;
  1. 用vscode连上服务器后,在服务器上安装vscode的sqlserver插件,试一试能不能连接上

PS:上述操作在个人电脑Ubuntu22.04(带UI界面)上成功走通,但是在我们学院的服务器上没走成功,卡在了第四步使用sqlcmd的连接,后来就全导出csv文件,用sqlite了…