ubuntu下读取sqlserver备份文件(mdf,ndf,ldf)
如标题所示,sqlserver的备份文件是由.mdf
, .ndf
和.ldf
组成
MDF:主要数据文件,primary data file
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。
NDF:次要数据文件,Secondary data files
次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。
LDF:事务日志,Log data files
事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。
为了方便,下面使用mdf作为这三种文件的统称
在windows上想读取mdf文件非常简单,装个ssms,甚至sqlserver都直接帮你装好了,用系统用户登陆,直接右键数据库,添加就行。
但如果想在linux服务器上如此操作,则需要手动安装sqlserver然后导入。参考官网的这篇教程。
- 为了不污染服务器环境,使用docker拉取
1 | sudo docker pull mcr.microsoft.com/mssql/server:2022-latest |
- 运行容器,设置磁盘映射,映射到容器的
/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 |
- 用root身份进入容器
1 | sudo docker exec -it sqlserver1 "bash" |
- 进入后使用sqlcmd命令进入sqlserver,用户名直接用SA,密码在跑容器的时候指定过
1 | sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "YOUR_PASSWD" |
- 在sqlserver中用CREATE DATABASE命令创建数据库,并制定文件名,可以写很多个
1 | CREATE DATABASE your_dbname ON (FILENAME = '/var/tmp/xxx.MDF'),(FILENAME = '/var/tmp/xxx.ndf') FOR ATTACH; |
- 用vscode连上服务器后,在服务器上安装vscode的sqlserver插件,试一试能不能连接上
PS:上述操作在个人电脑Ubuntu22.04(带UI界面)上成功走通,但是在我们学院的服务器上没走成功,卡在了第四步使用sqlcmd的连接,后来就全导出csv文件,用sqlite了…
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Gxyrious's Blog!