前言
Mac用户泪目。上一篇Navicat Premium连接上了Docker SQL Server,结果附加不了.MDF和.LDF文件脑阔疼。
首先,在终端用命令行导入.MDF和.LDF文件也不行,所以不是Navicat Premium的问题,是Docker SQL Server的本身导入不了,无关可视化工具。接着google半天,尝试了半天发现是.MDF文件和.LDF文件权限问题。下面列出导入步骤。
终端部分
1、Docker运行容器之后,使用该命令在容器内部启动交互式 Bash Shell.
docker exec -it sql1 "bash"
2、创建数据卷:
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
3、使用 docker volume ls 查看是否创建成功,成功的话会显示如图所示:

4、在带有数据卷的容器中创建个文件夹把我们的.MDF和.LDF文件复制过去:
docker exec -it sql1 mkdir /var/opt/mssql/data
docker cp /Users/chiyu/Desktop/xx.LDF sql1:/var/opt/mssql/data/xx.LDF
docker cp /Users/chiyu/Desktop/xx.MDF sql1:/var/opt/mssql/data/xx.MDF
5、然后!!!非常重要的是文件的权限!我就是因为刚开始不是root
查看权限:(我改完之后是这样)

改权限可以用:
chmod 666 xx.LDF
chown -R root:root xx.LDF
Navicat Premium部分
接下来用Navicat Premium导入。
1、先链接sql-server,然后新建数据库。


2、双击数据库打开(变绿色),然后点击左上方的新建查询,输入下面代码(dbname无所谓):
``
EXEC sp_attach_db @dbname = 'data1',
@filename1 = '/var/opt/mssql/data/Schoo_Data.MDF',
@filename2 = '/var/opt/mssql/data/Schoo_Log.LDF'
然后不报错就可以了,可能需要重启下Navicat Premium才能看见。实在导不进去的话就在别人电脑上导入然后存储SQL文件,得到一个.sql文件,再把这个文件导入Navicat Premium吧~
总结
主要是文件权限问题,不容易啊~Mac遇到的问题还是得多google,用英文搜。
本文解决在Mac环境下使用DockerSQLServer时无法导入MDF和LDF文件的问题,通过调整文件权限并使用特定命令完成导入。
2098

被折叠的 条评论
为什么被折叠?



