前言
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、使用 sqlcmd 进行本地连接,注意双引号里的是你的密码。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
3、创建数据卷:
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
4、使用 docker volume ls 查看是否创建成功,成功的话会显示如图所示:
5、在带有数据卷的容器中创建个文件夹把我们的.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
6、然后!!!非常重要的是文件的权限!我就是因为刚开始不是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才能看见。
总结
主要是文件权限问题,不容易啊~Mac遇到的问题还是得多google,用英文搜。