前言
从 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-latest | SQL Server Linux 容器映像 |
❗️注:密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可使用 docker logs 命令检查错误日志。
**数据持久化:**如果需要实现即使在容器停止后文件也能持久保存,可以在上面命令后添加
-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 命令行工具。 如果使用交互式命令提示符附加至此映像,则可在本地运行工具。
- 进入docker容器内
[root@docker mssql]# docker exec -it 77e "bash"
root@77ec13bea161:/#
- 通过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工具
备份还原
可以使用多个不同的选项备份 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 数据库并通过用户界面进行备份。
- 启动 SSMS 并连接到 Linux 上的 SQL Server 实例。
- 在“对象资源管理器”中,右键单击数据库,选择“任务”,然后选择“备份…”。
- 在“备份数据库”对话框中,验证参数和选项,然后选择“确定”。
还原
- 在 SSMS 中,右键单击“数据库”,然后选择“还原数据库…”。
- 在“源”下,选择“设备:”,然后选择省略号图标 (…)。
- 查找你的数据库备份文件,然后选择“确定”。
- 在“还原计划”下,验证备份文件和设置。 选择“确定”。
- SQL Server 将还原数据库。
本文由mdnice多平台发布