在 Docker for Windows 和使用windows 容器时,我无法让我的持久卷在 windows 容器的主数据库目录上工作。这将是C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA
如何在不必弄乱备份和还原到 mssql-server-container 的情况下获得数据库持久卷的好处?
这可能是因为数据目录将主数据库和系统数据库存储在我尝试安装持久卷的文件夹中。
在用于 linux 容器的 SQL Server 中,这很简单,您可以将持久卷连接到/var/opt/mssql并使数据库持久。
我知道我可以从备份中将数据库恢复到容器中,但这有两个主要缺点:我必须有一个大容器,因为我正在使用一个大数据库。因此,我将容器的 20 GB 限制扩展到 60 GB,但是...每次从备份中重建数据库非常耗时。第二个缺点是,如果 mssql-dev 容器被杀死,数据库也会丢失。对该数据库的任何工作都将消失。如果数据库可以驻留在持久卷上,则情况会有所不同。
docker run -d -e sa_password=<Password> -e ACCEPT_EULA=Y -v "C:\mylocalfolder:C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA" microsoft/mssql-server-windows-developer
Run Code Online (Sandbox Code Playgroud)
错误消息是“Windows 系统调用失败:虚拟计算机或容器意外关闭。(0xc0370106)
将持久卷连接到另一个位置,例如
c:\mydata防止来自上面的错误消息。然后在不使用标准数据库文件夹的情况下将数据库连接到服务器。
提取数据库.bak文件,所以有mdf和日志文件
docker run -d -e sa_password=<Password> -e ACCEPT_EULA=Y -v "C:\mylocalfolder:C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA" microsoft/mssql-server-windows-developer
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您现在应该在持久卷上准备好数据库文件。现在将数据库附加到服务器。这必须通过创建一个新的数据库来完成,但这个过程只需要几纳秒就可以完成!
--Get the name of your DB
RESTORE FILELISTONLY
FROM DISK …Run Code Online (Sandbox Code Playgroud)