玩转Docker之SQL Server 2017
今天研究了一下微软最新的数据库SQL Server 2017。9月27日其正式发布,看点一堆,而这次发布不仅有传统的Windows版本,也有Linux和Docker的版本,这也意味着SQL Server完成了一次跨平台的飞跃。 不少人会质疑Linux/Docker上的SQL Server究竟有多大意义,这就等于有人问.NET Core在Linux上有多大意义一样。我只能说在开源思想日益横行的IT时代中,微软也在与时俱进!
SQL Server 2017支持的平台环境如下表:
平台 | 文件系统 | 安装指南 |
---|---|---|
红帽企业Linux 7.3或7.4工作站,服务器和桌面 | XFS或EXT4 | 安装指南 |
SUSE Enterprise Linux Server v12 SP2 | XFS或EXT4 | 安装指南 |
Ubuntu 16.04LTS | XFS或EXT4 | 安装指南 |
适用于Windows,Mac或Linux的Docker Engine 1.8+ | N / A | 安装指南 |
这里面最让我兴奋的还是Docker容器部署,因为效率高,开发测试极为方便。
下面我就如何部署做一个简单的说明。
1.基本环境要求
需要Docker Engine 1.8+ 支持任何平台。
至少2GB的RAM(2017-CU2之前为3.25 GB)。
如果您在Docker for Mac或Windows上运行,请确保为Docker VM分配足够的内存。
还有一点要特别注意:SQL Server 2017目前支持XFS或ext4文件系统,请先用df -T
查看一下自己的文件系统。不然运行会失败!!运行容器后,报错信息如下:
2018-02-21 11:53:33.60 spid7s Error: 17053, Severity: 16, State: 1.
2018-02-21 11:53:33.60 spid7s /var/opt/mssql/data/mastlog.ldf: Operating system error 31(A device attached to the system is not functioning.) encountered.
2018-02-21 11:53:34.61 spid7s Error: 928, Severity: 20, State: 1.
2018-02-21 11:53:34.61 spid7s During upgrade, database raised exception 9002, severity 17, state 0, address 0000000484D0157E. Use the exception number to determine the cause.
2018-02-21 11:53:34.62 spid7s Error: 9002, Severity: 17, State: 0.
2018-02-21 11:53:34.62 spid7s The transaction log for database ‘master’ is full due to ‘NOTHING’.
2.拉取镜像
docker pull microsoft/mssql-server-linux
参考:https://hub.docker.com/r/microsoft/mssql-server-linux/
3.使用Docker运行容器镜像
docker run --name mysqlserver -e 'ACCEPT_EULA=Y' \ -e 'MSSQL_SA_PASSWORD=Test123456' \ -e 'MSSQL_PID=Enterprise' \ -p 1433:1433 \ -v /data/sqlserver:/var/opt/mssql \ -d microsoft/mssql-server-linux
几点说明:
-v /data/sqlserver:/var/opt/mssql :映射数据库文件到主机目录/data/sqlserver。
-e ‘ACCEPT_EULA = Y’:确认您接受最终用户许可协议。
MSSQL_SA_PASSWORD:是一旦容器运行时用于连接到SQL Server的数据库系统管理员(userid =’sa’)密码。重要说明:此密码需要包含至少8个字符,其中至少三个类别为大写字母,小写字母,数字和非字母数字符号。
MSSQL_PID:是容器将与之一起运行的产品ID(PID)或版本。可接受的值:
1.Developer:这将使用Developer Edition运行容器(如果没有提供MSSQL_PID环境变量,这是默认的)
2.Express:这将使用Express Edition运行容器
3.Standard:这将使用标准版运行容器
4.Enterprise:这将使用企业版运行容器
5.EnterpriseCore:这将使用Enterprise Edition Core运行容器
6.<valid product id>:这将运行与PID关联的版本的容器
参考:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables
4.检查运行情况
执行命令:
docker ps -a
说明SQL Server 执行成功。
5.利用SSMS连接数据库
最新版本是17.5的,支持SQL Server2017版本。
启动SSMS后,输入主机IP,用户名sa,密码Test123456,连接数据库,后面的操作跟windows版本一致,很舒服。
参考文档:https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes