gpt4 book ai didi

sql-server - 如何使用Docker和Docker Compose从备份开始自动创建和运行 “clean” SQL Server数据库?

转载 作者:行者123 更新时间:2023-12-02 21:16:24 27 4
gpt4 key购买 nike

我正在一家使用小型SQL Server备份文件处理数据库自举的公司入职。我希望避免使用各种中间件来污染Windows的主要安装,因此我想尽可能多地对其进行docker化。

就是说,我对SQL Server管理不是很熟悉,所以我对如何完成这些细节以及我的想法是否正确完全有些困惑。

我正在考虑两种基本方法:

  • 将初始化数据库(即还原备份)作为数据库镜像的一部分。也就是说,我将使用FROM microsoft/mssql-server-windows-express的Dockerfile添加到项目中,还原备份文件,最后得到一个容器镜像,并准备好数据库作为最终结果。
  • 这里的好处是将它作为镜像构建的一部分是很有意义的-如果更新了初始备份文件,则只需要使用docker-compose up --build即可获取正确的状态。
  • 的缺点是数据文件可能应该在Docker卷中,而这些文件在容器构建时实际上并不存在。必须记住在重建镜像之前实际要重新创建架构之前要清除卷,这似乎会消除所需的优势。
  • 做一个一次性工具,将数据库还原到存储在Docker卷中的MDF + LDF中,然后将其与服务器分离。然后,使用attach_dbs环境变量将它们附加到将长期运行的SQL Server服务中。
  • 这种方法很明显,数据库文件的生存期与任何给定SQL Server实例的生存期无关。


  • 我的问题是:
  • ,即使两种方法都可行,哪种方法更好?
  • 是否有更好的方法来完成从.bak->容器中工作数据库的操作?
  • 如何使用命令行将SQL Server数据库备份还原到特定路径-容器内的“C:\ Data”。 (将使用卷将其映射到主机目录。)
  • 最佳答案

    目前尚不清楚您何时需要重置容器数据库的状态,这两个选项听起来都一样。

    如果对备份所做的更改要求重建数据库,则可以在两阶段的Windows容器中非常高效地完成此操作:

    from microsoft/mssql-server-windows-developer as db_restore
    copy db.bak \.

    run Invoke-Sqlcmd -Query \"restore database [temp] from disk = 'c:\\db.bak' \
    with move 'Db_Data' to 'c:\\db.mdf', \
    move 'Db_Log' to 'c:\\db.ldf'\"

    run Invoke-Sqlcmd -Query \"shutdown with nowait\"

    from microsoft/mssql-server-windows-developer
    workdir \data
    copy --from=db_restore \db.mdf .
    copy --from=db_restore \db.ldf .

    run Invoke-Sqlcmd -Query \"create database [Db] \
    on primary ( name = N'Db_Data', filename = N'c:\\data\\db.mdf') \
    log on (name = N'Db_Log', filename = N'c:\\data\\db.ldf') for attach\"

    关于sql-server - 如何使用Docker和Docker Compose从备份开始自动创建和运行 “clean” SQL Server数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682322/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com