前言
从 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参数说明
❗️注:密码应符合 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 将还原数据库。