从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
安装内容
数据库版本:SQL Server 2019 企业版
操作系统:CentOS 7.9
配置如下图:
安装环境准备
本文演示的Linux发行版是CentOS 7.9。接下来是SQL Server 2019的部署细节,包括安装源的配置、安装SQL Server数据库、配置数据库服务以及一些高级选项设置。
安装阶段
配置安装源
SQL Server支持下面的Linux发行版,下面是各个Linux发行版针对SQL Server 2019的安装源,红帽系统的yum地址同样适用于CentOS系统
Linux 发行版 | 安装包格式 | 安装源地址 | 第三方工具源地址 | 包管理系统 |
---|---|---|---|---|
Red Hat Enterprise Linux 7 | RPM | https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo | https://packages.microsoft.com/config/rhel/7/prod.repo | yum |
Red Hat Enterprise Linux 8 | RPM | https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo | https://packages.microsoft.com/config/rhel/8/prod.repo | yum 或 dnf |
Ubuntu 20.04 LTS | DEB | https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list | https://packages.microsoft.com/config/ubuntu/20.04/prod.list | apt |
Ubuntu 22.04 LTS | DEB | https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2019.list | https://packages.microsoft.com/config/ubuntu/22.04/prod.list | apt |
SUSE Linux Enterprise Server 15 | RPM | https://packages.microsoft.com/config/sles/15/mssql-server-2019.repo | https://packages.microsoft.com/config/sles/15/prod.repo | zypper |
配置yum安装源
在CentOS 7.9平台上添加微软官方的yum源。
我们使用curl命令来下载.repo文件,然后添加SQL Server 2019的yum源到系统中。
下载.repo文件
SQL Server 2019包含了两个安装源,一个用于SQL Server安装包,另一个包含mssql-tools和unixODBC-devel第三方工具。
curl -o /etc/yum.repos.d/mssql-server-2019.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
cd /etc/yum.repos.d/
ls -l
刷新yum缓存
添加新的源之后,我们需要刷新yum工具的缓存,以确保yum工具知道新添加的安装源和软件包。
yum clean all
yum makecache
一旦添加好了yum安装源,我们就可以安装 SQL Server 2019数据库及其工具,这里安装分为两种方式,读者可以根据自己实际情况进行选择。
- 断网安装
如果生产环境规定不能联网,读者可以在生产环境部署一个内网yum源,或者在联网的机器上先下载好安装包和所有依赖包,然后把所有rpm安装包分发到需要部署数据库的机器,在部署机器上使用包管理器或者yum工具进行离线安装。
在能联网的机器上使用下面命令只下载安装包和所有依赖包
yum install -y mssql-server --downloadonly --downloaddir=/usr/local/src/
yum命令已经下载好了安装包以及所有的依赖包。
上图可以看到下载好的安装包和所有依赖包,安装包只有229MB大小,比MySQL的二进制包还要小
把所有安装包和依赖包分发到要部署数据库的机器之后,用下面命令进行安装,安装过程中,yum命令会自动解决安装包的依赖关系。
cd /usr/local/src/
yum localinstall -y --nogpgcheck mssql-server-15.0.4375.4-1.x86_64.rpm
下图显示了断网环境下,yum工具也能自动解决依赖并且安装成功,并且安装速度也非常快,适合大批量自动化部署的场景。
这时候,断网安装完毕
- 联网安装
适合生产环境可以连接互联网的情况,yum工具会自动连接yum安装源并下载所需的rpm包并解决依赖问题。
yum install -y mssql-server
- 安装第三方工具
第三方工具mssql-tools 包含命令行工具,如 sqlcmd、bcp等。另外,unixODBC-devel 是 ODBC 驱动的开发包。 使用下面命令安装第三方工具:
ACCEPT_EULA=Y yum install -y mssql-tools unixODBC-devel
我们需要把目录添加到当前用户的环境变量 PATH 中。添加之后,用户可以在终端中直接运行 sqlcmd 和bcp命令,而不需要每次都输入完整路径。
执行下面命令把安装目录路径添加到当前用户环境变量中并使用source命令立刻生效
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssq1-tools/bin"' >> ~/.bashrc
source ~/.bashrc
source ~/.bash_profile
- 安装后的的目录结构
安装后的的目录结构和文件位置如下
默认数据目录:/var/opt/mssql/
默认配置文件(不建议修改,保持默认即可):/var/opt/mssql/mssql.conf,
默认系统数据库目录:/var/opt/mssql/data/
默认错误日志和代理日志文件目录:/var/opt/mssql/log/
默认安装目录:/opt/mssql/
其中,数据目录需要在配置阶段进行修改,其他目录和文件保持默认即可。
- 数据库简单初始化
在安装完SQL Server之后,需要进行简单的初始化配置。
MSSQL_SA_PASSWORD='******' MSSQL_PID=Enterprise ACCEPT_EULA=Y SQL_INSTALL_AGENT=Y /opt/mssql/bin/mssql-conf -n setup
数据库安装完毕之后需要使用几个简单参数进行初始化配置,数据库初始化配置完毕之后,就会自动启动SQL Server服务。
- 数据库初始化配置
参数解释如下
MSSQL_SA_PASSWORD:设置sa用户的密码,命令中的*号需要替换为实际的密码
MSSQL_PID:设置产品密钥
ACCEPT_EULA:接受产品许可条款
SQL_INSTALL_AGENT:安装SQL代理组件
- MSSQL_PID 参数的说明
MSSQL_PID 是用来指定 SQL Server 版本或激活模式的参数,该参数有以下几种取值:
Evaluation:180 天试用版,提供企业版的功能,但到期后停止运行。
Developer:免费版,开发者版,功能和 Enterprise 完全相同,不适用于生产环境。
Express:免费版,具有一定的限制。
Web:网络版,付费版,为托管服务提供商设计。
Standard:标准版,付费版,功能较少但适合中小型企业。
Enterprise:企业版,付费版,提供完整的 SQL Server 功能集。
EnterpriseCore:核心版本的企业版,付费版,按CPU核心数付费。
ProductKey:输入 25 个字符的产品密钥来激活上面提到的特定版本。
- 授权和评估模式
当用户输入产品密钥的时候,SQL Server会根据产品密钥激活相应的版本,如果用户没有输入产品密钥,只是输入特定的版本,那么就会进入对应版本的180天试用版,默认激活的是企业版,试用期结束后,SQL Server 将停止工作,直到输入有效的产品密钥再次进行激活。可以使用Windows版的SQL Server盗版密钥输入到Linux版。
产品重新激活 如果 SQL Server 处于试用期或需要升级到正式版本,可以通过以下命令设置产品密钥
- 停止 SQL Server 服务
systemctl stop mssql-server
- 运行命令并输入所需的版本和产品密钥
/opt/mssql/bin/mssql-conf set-edition
按照提示选择需要的版本(1-10),然后输入 25 个字符的产品密钥,并完成激活:
- 启动 SQL Server服务
systemctl start mssql-server
- 检查当前版本和授权状态
读者可以通过以下 T-SQL 查询检查 SQL Server 的版本和授权状态
SELECT SERVERPROPERTY('Edition') AS Edition, --当前版本类型(如 Enterprise)
SERVERPROPERTY('ProductVersion') AS Version,
SERVERPROPERTY('LicenseType') AS LicenseType, --如果显示 DISABLED,表示当前处于180天企业版试用模式
SERVERPROPERTY('EngineEdition') AS EngineEdition;
GO
- 验证安装 我们首先使用下面命令启动和查看SQL Server服务
systemctl start mssql-server
systemctl status mssql-server
使用sqlcmd和SSMS工具连接数据库实例然后查询数据库版本信息,默认端口1433,执行下面命令输入sa的密码即可查询数据库版本号
/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U sa -Q "SELECT @@version"
--返回以下数据
-------------------------------------------------------------------------------------------
Microsoft SQL Server 2019 (RTM-CU27) (KB5037331) - 15.0.4375.4 (X64)
Jun 10 2024 18:00:07
Copyright (C) 2019 Microsoft Corporation
Enterprise Edition (64-bit) on Linux (CentOS Linux 7 (Core)) <X64> (1 rows affected)
在SSMS管理器里会看到有Linux的企鹅图标
配置阶段
在Linux平台上,服务器级别的配置项可以通过mssql-conf命令来设置,而非服务器级别配置项只能使用SQL语句来设置,
在这里说明mssql-conf命令的主要参数如下
/opt/mssql/bin/mssql-conf
setup 初始化并设置 Microsoft SQL Server。
set 设置某个设置的值
unset 取消设置某个设置的值
list 列出受支持的设置
get 获取节中所有设置的值或各个设置的值
traceflag 启用/禁用一个或多个跟踪标志
set-sa-password 设置系统管理员(SA)密码
set-collation 设置系统数据库的排序规则
validate 验证配置文件
set-edition 设置 SQL Server 实例的版本
- 配置默认数据和日志目录
磁盘布局
/data/是一个单独挂载的数据盘,专门用于存放数据的,遵循最佳实践
数据目录:/data/mssql/1433/database
备份目录:/data/mssql/1433/dbbackup
转储目录:/data/mssql/1433/dump
为SQL Server指定默认的数据、日志和备份目录,在安装好SQL Server之后会自动创建好mssql这个系统用户
mkdir -p /data/mssql/1433/{dump,dbbackup,database,tempdb}
chown -R mssql:mssql /data/mssql/
设置默认数据库、日志和备份目录
/opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /data/mssql/1433/database
/opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /data/mssql/1433/database
/opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /data/mssql/1433/dbbackup
/opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /data/mssql/1433/dump
- 启用死锁跟踪标志
使用下面命令启用死锁跟踪的相关标志
/opt/mssql/bin/mssql-conf traceflag 1211 1222 1204 on
- 配置数据库最大内存
根据调整公式进行数据库最大内存的调整。笔者计算机的内存为3GB,所以这里最大服务器内存设置为3GB。使用下面命令进行设置
/opt/mssql/bin/mssql-conf set memory.memorylimitmb 3000
- 启用 Always On 可用性组(高可用性)
如果需要使用数据库的高可用性集群架构,那么建议开启Always On 可用性组选项,Always On 可用性组是SQL Server的高可用性集群架构功能。 使用下面命令启用Always On 可用性组选项
/opt/mssql/bin/mssql-conf set hadr.hadrenabled true
- 启用 SQL Server Agent
SQL Server Agent 是用于调度和自动化 SQL Server 任务的服务。在Linux平台上,微软把SQL Server服务和SQL Server Agent服务合二为一,默认在安装完SQL Server之后已经自带了SQL Server Agent服务,这个跟Windows平台上的SQL Server有比较大的区别。 使用以下命令启用 SQL Server Agent
/opt/mssql/bin/mssql-conf set sqlagent.enabled true--如果要查看SQL Server Agent服务是否已经启用,可以通过下面SQL命令来查看
SELECT * FROM sys.dm_server_services
- 配置高级选项
使用下面SQL语句配置高级选项
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'contained database authentication', 1;
EXEC sp_configure 'backup checksum default', 1;
EXEC sp_configure 'backup compression default', 1;
EXEC sp_configure 'blocked process threshold (s)', 5;
EXEC sp_configure 'max degree of parallelism', 2;
RECONFIGURE;
- 配置TempDB数据库
Linux平台上的SQL Server已经为用户优化了TempDB数据库的数据文件个数,默认是生成4个TempDB数据文件,这里只需要更改 TempDB的数据文件放置位置。
我们之前已经新建好目录/data/mssql/1433/tempdb/,使用下面SQL语句修改TempDB的数据文件位置。
USE master;
GO
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = '/data/mssql/1433/tempdb/tempdb.mdf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev2, FILENAME = '/data/mssql/1433/tempdb/tempdb2.ndf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev3, FILENAME = '/data/mssql/1433/tempdb/tempdb3.ndf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev4, FILENAME = '/data/mssql/1433/tempdb/tempdb4.ndf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = '/data/mssql/1433/tempdb/templog.ldf');
上面介绍的配置在设置完毕后,都需要重启SQL Server服务来使配置生效,我们使用下面命令来设置SQL Server服务为自动启动,然后重启SQL Server服务
systemctl enable mssql-server.service
systemctl restart mssql-server.service
- 检查配置
我们使用下面SQL语句检查各个配置项,下图可以看到各个配置项都已经配置生效。
SELECT name, value, value_in_use, is_dynamic, description
FROM sys.configurations
WHERE name IN (
'max degree of parallelism',
'max server memory (MB)',
'blocked process threshold (s)',
'contained database authentication',
'max degree of parallelism',
'backup compression default',
'backup checksum default',
'ADR Cleaner Thread Count',
'contained database authentication',
'Agent XPs'
);
DBCC TRACESTATUS(1211,1222,1204)
SELECT SERVERPROPERTY('InstanceDefaultDataPath') AS DefaultDataPath;
SELECT SERVERPROPERTY('InstanceDefaultLogPath') AS DefaultLogPath;
SELECT SERVERPROPERTY ('IsHadrEnabled');
SELECT * FROM sys.dm_server_services;
SELECT 'TempDB', name , physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb');
systemctl restart mssql-server.service
下上图可以看到目录配置是正常的
另外,从图可以看到,SQL Server Agent服务也已经正常启用。
- 主要配置文件
Linux平台上,mssql.conf是SQL Server的主要配置文件,用于管理各种设置。 该文件位于/var/opt/mssql/mssql.conf路径下,通过调整其中配置项可以控制SQL Server的行为和特性。
配置文件是基于节(section)的结构,常见的节包括: [sqlagent]:控制SQL Server代理服务的设置。
[EULA]:管理最终用户许可协议的接受情况。
[filelocation]:定义数据库文件、日志文件、备份文件和转储文件的默认存储位置。
[traceflag]:设置跟踪标志,用于调试和性能优化。
[memory]:管理SQL Server使用的内存设置。
[hadr]:用于启用或禁用高可用性功能,如Always On。
如果配置文件中没有某些设置项,SQL Server会使用其默认配置。下面是设置所有配置项后的配置文件内容
cat /var/opt/mssql/mssql.conf
[sqlagent]
enabled = true[EULA]
accepteula = Y[filelocation]
defaultdatadir = /data/mssql/1433/database
defaultlogdir = /data/mssql/1433/database
defaultbackupdir = /data/mssql/1433/dbbackup
defaultdumpdir = /data/mssql/1433/dump[traceflag]
traceflag0 = 1211
traceflag1 = 1222
traceflag2 = 1204[memory]
memorylimitmb = 3000[hadr]
hadrenabled = true
本文版权归作者所有,未经作者同意不得转载。