青年数据库学习互助会

docker部署mssql2017

前言

从 SQL Server 2017 开始,可以安装Linux 上的 SQL Server操作系统,同时也开始支持容器部署,更加方便了各位开发同学的使用。

先决条件

  • 任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本。有关详细信息,请参阅 Install Docker(安装 Docker)。
  • 有关硬件要求和处理器支持的详细信息,请参阅 SQL Server 2016 和 2017:硬件和软件要求
  • Docker overlay2 存储驱动程序。此驱动程序是大多数用户的默认设置。如果你未使用此存储提供程序并且需要进行更改,请参阅有关配置 overlay2 的 Docker 文档中的说明和警告。
  • 在 Docker 主机上安装最新的 sqlcmd。
  • 至少   2 GB 的磁盘空间。
  • 至少 2 GB 的 RAM。
  • Linux 上的 SQL Server 的系统要求。

部署

docker部署请自行搜索其他博主文章,后续有时间完成docker部署教程后会在此添加连接

拉取镜像

docker pull mcr.microsoft.com/mssql/server:2017-latest

启动

docker run方式

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=12345678" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2017-latest

docker run参数说明

参数说明
-e "ACCEPT_EULA=Y"将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。SQL Server 映像的必需设置。
-e "MSSQL_SA_PASSWORD=YourStrong@Passw0rd"指定至少包含 8 个字符且符合密码策略的强密码。SQL Server 映像的必需设置。
-e "MSSQL_COLLATION=<SQL_Server_collation>"指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS。
-p 1433:1433将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。
--name sql1为容器指定一个自定义名称,而不是使用随机生成的名称。如果运行多个容器,则无法重复使用相同的名称。
--hostname sql1用于显式设置容器主机名。如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
-d在后台运行容器(守护程序)。
mcr.microsoft.com/mssql/server:2017-latestSQL Server Linux 容器映像

❗️注:密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。可使用 docker logs 命令检查错误日志。Image

❝

数据持久化:如果需要实现即使在容器停止后文件也能持久保存,可以在上面命令后添加 -v sqlvolume:/var/opt/mssql,其中sqlvolume就是宿主机的一个文件挂载名称,冒号后边的是容器内的目录,这样数据将会被存储在宿主机保留,避免数据丢失。

Docker-compose方式

在实际应用中,docker run方式由于参数繁多,每次启动都需要配置参数选项,所以docker-compose方式更适合日常部署。

编辑/data/mmssql/docker-compose.yml文件:

version: '3'
services:
  #服务名称
  sqlserver-db:
    #容器名称
    container_name: sqlserver-db
    #镜像名称
    image: microsoft/mssql-server-linux:2017-latest
    #端口映射
    ports:
      - 1433:1433
    #挂载宿主机目录,数据持久化
    volumes:
      - ./data:/var/opt/mssql
    #环境变量
    environment:
      - ACCEPT_EULA=Y
      #SA用户密码长度必须至少为 8 个字符,并包含以下四组中的三组字符:大写字母、小写字母、10 位基数和符号
      - MSSQL_SA_PASSWORD=Abc@1234
      - MSSQL_PID=EnterpriseCore
      - TZ=Asia/Shanghai

在docker-compose.yml文件同级目录创建挂载路径,并启动docker

[root@docker mssql]# mkdir data
[root@docker mssql]# docker compose up -d
[root@docker mssql]# docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED         STATUS         PORTS                                       NAMES
77ec13bea161   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/nonr…"   5 minutes ago   Up 4 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sqlserver-db

连接

sqlcmd方式

从 SQL Server 2017 (14.x) 开始,容器映像中加入了 SQL Server 命令行工具。如果使用交互式命令提示符附加至此映像,则可在本地运行工具。

  1. 进入docker容器内
[root@docker mssql]# docker exec -it 77e "bash"
root@77ec13bea161:/#
  1. 通过qlcmd进行本地连接
root@77ec13bea161:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Abc@1234'
1> select name from master.dbo.sysdatabases
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb

容器外工具

可从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到容器主机上的 SQL Server 实例。

SSMS工具

Image
Image

备份还原

可以使用多个不同的选项备份 Linux 上的 SQL Server 中的数据库。在 Linux 服务器上,可以使用 sqlcmd 连接到 SQL Server 并进行备份。如果是 Windows,则可以在连接到 Linux 上的 SQL Server 后通过用户界面进行备份。各平台间的备份功能都是相同的

sqlcm工具

备份数据库

sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [demodb] TO DISK = N'/var/opt/mssql/data/demodb.bak' WITH NOFORMAT, NOINIT, NAME = 'demodb-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

备份事物日志

如果数据库处于完整恢复模式,还可以进行事务日志备份以获得更精细的还原选项

sqlcmd -S localhost -U SA -Q "BACKUP LOG [demodb] TO DISK = N'/var/opt/mssql/data/demodb_LogBackup.bak' WITH NOFORMAT, NOINIT, NAME = N'demodb_LogBackup', NOSKIP, NOREWIND, NOUNLOAD, STATS = 5"

还原数据库

NORECOVERY 选项用于其他日志文件备份的还原。如果不打算还原额外的日志文件,请删除 NORECOVERY 选项。

sqlcmd -S localhost -U SA -Q "RESTORE DATABASE [demodb] FROM DISK = N'/var/opt/mssql/data/demodb.bak' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 5"
  • 还原事物日志
sqlcmd -S localhost -U SA -Q "RESTORE LOG demodb FROM DISK = N'/var/opt/mssql/data/demodb_LogBackup.bak'"

SSMS工具

备份

可以从 Windows 计算机使用 SSMS 连接到 Linux 数据库并通过用户界面进行备份。

  1. 启动 SSMS 并连接到 Linux 上的 SQL Server 实例。
  2. 在“对象资源管理器”中,右键单击数据库,选择“任务”,然后选择“备份...”。
  3. 在“备份数据库”对话框中,验证参数和选项,然后选择“确定”。

还原

  1. 在 SSMS 中,右键单击“数据库”,然后选择“还原数据库...”。
  2. 在“源”下,选择“设备:”,然后选择省略号图标 (...)。
  3. 查找你的数据库备份文件,然后选择“确定”。
  4. 在“还原计划”下,验证备份文件和设置。选择“确定”。
  5. SQL Server 将还原数据库。