2026年CentOS上部署SQL Server完整指南(2026)

一、SQL Server on Linux概述

SQL Server是Microsoft开发的关系型数据库管理系统,2017年开始支持Linux系统。如今,SQL Server 2019和2022版本在CentOS、RHEL、Ubuntu和SUSE等Linux发行版上都能稳定运行。

SQL Server on Linux的核心优势
– 跨平台支持:Windows、Linux、Docker容器
– 高性能:支持企业级事务处理和数据分析
– 高可用性:Always On可用性组支持
– 安全性:内置加密和威胁检测
– 成本效益:降低数据库总体拥有成本

支持的CentOS版本
– CentOS 7.x
– CentOS Stream 8
– CentOS Stream 9
– RHEL 7.x/8.x/9.x(同样适用)

二、系统要求与前置条件

2.1 硬件要求

组件 最低要求 推荐配置
CPU 2核心 4+核心
内存 2 GB 8+ GB
磁盘空间 6 GB 50+ GB
文件系统 XFS或EXT4 XFS
CPU架构 x64或ARM64 x64

内存要求说明
– 最低2GB可运行,但会有内存警告
– 推荐至少4GB用于生产环境
– SQL Server会占用大部分可用内存

2.2 必需的系统组件

# CentOS 7
sudo yum install -y curl wget unzip

# CentOS Stream 8/9
sudo dnf install -y curl wget

2.3 网络要求

  • 端口1433:SQL Server默认端口,必须开放
  • 防火墙配置
# 防火墙开放SQL Server端口
sudo firewall-cmd --permanent --add-port=1433/tcp
sudo firewall-cmd --reload

# 或使用firewalld服务规则
sudo firewall-cmd --permanent --add-service=mssql
sudo firewall-cmd --reload

三、安装SQL Server

3.1 CentOS 7安装步骤

第一步:添加Microsoft仓库

# 下载并安装SQL Server 2019仓库配置
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo

# 确认仓库添加成功
sudo yum makecache

第二步:安装SQL Server

# 安装SQL Server
sudo yum install -y mssql-server

# 安装完成后的输出信息
# The following NEW packages are installed:
#   mssql-server

第三步:初始化SQL Server

# 运行初始化配置
sudo /opt/mssql/bin/mssql-conf setup

# 系统会提示选择版本和设置SA密码
# 
# 1) Evaluation (免费,无过期)
# 2) Developer (免费,用于开发)
# 3) Express (免费,用于小规模应用)
# 4) Web (付费,适合Web应用)
# 5) Standard (付费,适合企业级应用)
# 6) Enterprise (付费,功能最全)
#
# 输入选项编号,然后设置SA密码(密码必须满足复杂度要求)

第四步:验证安装

# 检查SQL Server服务状态
sudo systemctl status mssql-server

# 查看监听端口
sudo ss -tlnp | grep 1433

3.2 CentOS Stream 8/9安装步骤

第一步:添加Microsoft仓库

# CentOS Stream 8
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo

# CentOS Stream 9
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/9/mssql-server-2022.repo

第二步:安装SQL Server 2022

# 更新系统
sudo dnf update -y

# 安装SQL Server
sudo dnf install -y mssql-server

# 初始化配置
sudo /opt/mssql/bin/mssql-conf setup

第三步:启动服务

# 启用并启动SQL Server
sudo systemctl enable mssql-server
sudo systemctl start mssql-server

# 验证服务状态
sudo systemctl status mssql-server

3.3 Docker方式安装(推荐用于测试)

# 安装Docker
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker

# 拉取SQL Server容器
sudo docker pull mcr.microsoft.com/mssql/server:2022-latest

# 运行SQL Server容器
sudo docker run -e "ACCEPT_EULA=Y" \
               -e "MSSQL_SA_PASSWORD=YourStrong@Password" \
               -p 1433:1433 \
               --name mssql \
               -v mssqldata:/var/opt/mssql \
               -d mcr.microsoft.com/mssql/server:2022-latest

# 验证容器运行状态
sudo docker ps

四、安装SQL Server命令行工具

4.1 安装sqlcmd命令行工具

CentOS/RHEL安装

# 添加Microsoft工具仓库
sudo curl -o /etc/yum.repos.d/mssql-tools.repo https://packages.microsoft.com/config/rhel/7/prod.repo

# 安装命令行工具
sudo yum install -y mssql-tools unixODBC-devel

# 添加到PATH
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
source ~/.bash_profile

# 验证安装
sqlcmd -?

4.2 使用Docker运行sqlcmd

# 运行sqlcmd
sudo docker run -it --rm mcr.microsoft.com/mssql-tools:latest \
                /opt/mssql-tools/bin/sqlcmd \
                -S localhost -U sa -P "YourStrong@Password" \
                -C

五、连接与管理SQL Server

5.1 使用sqlcmd连接

# 本地连接
sqlcmd -S localhost -U sa -P "YourStrong@Password"

# 或使用-C参数自动信任服务器证书
sqlcmd -S localhost -U sa -P "YourStrong@Password" -C

# 连接后执行SQL命令
# 1> SELECT @@VERSION
# 2> GO

5.2 基本数据库操作

-- 创建数据库
CREATE DATABASE TestDB;
GO

-- 查看所有数据库
SELECT name, database_id, create_date 
FROM sys.databases;
GO

-- 使用数据库
USE TestDB;
GO

-- 创建表
CREATE TABLE Employees (
    ID INT PRIMARY KEY,
    Name NVARCHAR(50),
    Department NVARCHAR(50),
    Salary DECIMAL(10,2),
    HireDate DATE
);
GO

-- 插入数据
INSERT INTO Employees VALUES 
    (1, '张三', '技术部', 15000.00, '2023-01-15'),
    (2, '李四', '市场部', 12000.00, '2023-03-20'),
    (3, '王五', '财务部', 13000.00, '2023-05-10');
GO

-- 查询数据
SELECT * FROM Employees;
GO

-- 更新数据
UPDATE Employees 
SET Salary = Salary * 1.1 
WHERE Department = '技术部';
GO

5.3 安装SSMS远程管理

虽然SSMS是Windows工具,但可以远程连接Linux上的SQL Server:

  1. 下载SSMS:https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms
  2. 在Windows机器上安装SSMS
  3. 远程连接到:服务器IP:1433
  4. 使用SA账户登录

六、配置与优化

6.1 内存配置

# 查看当前内存配置
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb

# 设置SQL Server内存限制(例如32GB)
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 32768

# 重启SQL Server生效
sudo systemctl restart mssql-server

6.2 排序规则配置

# 查看当前排序规则
sqlcmd -S localhost -U sa -P "YourStrong@Password" -Q "SELECT @@VERSION"

# 修改排序规则(例如支持中文)
sudo /opt/mssql/bin/mssql-conf set collation
# 选择:SQL_Latin1_General_CP1_CI_AS 或 Chinese_PRC_CI_AS
sudo systemctl restart mssql-server

6.3 开启远程连接

# 查看TCP配置
sudo /opt/mssql/bin/mssql-conf set network.tcpport

# 默认端口1433,确保防火墙开放
sudo firewall-cmd --permanent --add-port=1433/tcp
sudo firewall-cmd --reload

6.4 启用Always On(高可用)

# 启用Always On
sudo /opt/mssql/bin/mssql-conf set hadr.enabled true

# 重启SQL Server
sudo systemctl restart mssql-server

七、备份与恢复

7.1 数据库备份

-- 完整备份
BACKUP DATABASE TestDB
TO DISK = '/var/opt/mssql/data/TestDB_Full.bak'
WITH COMPRESSION, CHECKSUM;
GO

-- 差异备份
BACKUP DATABASE TestDB
TO DISK = '/var/opt/mssql/data/TestDB_Diff.bak'
WITH DIFFERENTIAL, COMPRESSION;
GO

-- 日志备份
BACKUP LOG TestDB
TO DISK = '/var/opt/mssql/data/TestDB_Log.trn'
WITH COMPRESSION;
GO

7.2 数据库恢复

-- 完整恢复
RESTORE DATABASE TestDB
FROM DISK = '/var/opt/mssql/data/TestDB_Full.bak'
WITH NORECOVERY;
GO

-- 恢复差异备份
RESTORE DATABASE TestDB
FROM DISK = '/var/opt/mssql/data/TestDB_Diff.bak'
WITH NORECOVERY;
GO

-- 恢复日志备份
RESTORE LOG TestDB
FROM DISK = '/var/opt/mssql/data/TestDB_Log.trn'
WITH RECOVERY;
GO

7.3 自动化备份脚本

#!/bin/bash
# backup_sqlserver.sh - SQL Server自动化备份脚本

BACKUP_DIR="/var/opt/mssql/backups"
DATE=$(date +%Y%m%d_%H%M%S)
SA_PASSWORD="YourStrong@Password"
KEEP_DAYS=7

# 创建备份目录
mkdir -p $BACKUP_DIR

# 备份所有用户数据库
sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -Q "
SELECT name FROM sys.databases WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb');
" | while read dbname; do
    if [ ! -z "$dbname" ]; then
        echo "正在备份数据库: $dbname"
        sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -Q "
        BACKUP DATABASE [$dbname] 
        TO DISK = '$BACKUP_DIR/${dbname}_${DATE}.bak'
        WITH COMPRESSION, CHECKSUM;
        "
    fi
done

# 清理过期备份
find $BACKUP_DIR -name "*.bak" -mtime +$KEEP_DAYS -delete

echo "备份完成:$DATE"

八、安全配置

8.1 更改SA密码

# 使用sqlcmd更改密码
sqlcmd -S localhost -U sa -P "OldPassword" -Q "ALTER LOGIN sa WITH PASSWORD = 'NewStrong@Password'"

8.2 创建新登录账户

-- 创建SQL Server登录账户
CREATE LOGIN AppUser WITH PASSWORD = 'AppUser@Password123';

-- 创建数据库用户
USE TestDB;
CREATE USER AppUser FOR LOGIN AppUser;

-- 授予权限
ALTER ROLE db_datareader ADD MEMBER AppUser;
ALTER ROLE db_datawriter ADD MEMBER AppUser;

8.3 配置加密连接

# 生成自签名证书(仅用于测试)
sudo mkdir -p /var/opt/mssql/certs
sudo openssl req -x509 -newkey rsa:4096 -keyout /var/opt/mssql/certs/server.key -out /var/opt/mssql/certs/server.crt -days 365 -nodes

# 配置SQL Server使用证书
sudo /opt/mssql/bin/mssql-conf set network.tlscert /var/opt/mssql/certs/server.crt
sudo /opt/mssql/bin/mssql-conf set network.tlskey /var/opt/mssql/certs/server.key
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1

# 重启服务
sudo systemctl restart mssql-server

8.4 配置审计

-- 启用SQL Server审计
CREATE SERVER AUDIT [Audit-Login]
TO FILE (FILEPATH = '/var/opt/mssql/log/', MAXSIZE = 10 MB)
WITH (ON_FAILURE = CONTINUE);

CREATE SERVER AUDIT SPECIFICATION [Audit-All-Logins]
FOR SERVER AUDIT [Audit-Login]
ADD (SUCCESSFUL_LOGIN_GROUP),
ADD (FAILED_LOGIN_GROUP);

ALTER SERVER AUDIT [Audit-Login] WITH (STATE = ON);
ALTER SERVER AUDIT SPECIFICATION [Audit-All-Logins] WITH (STATE = ON);

九、性能监控与调优

9.1 动态管理视图查询

-- 查看当前连接
SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;

-- 查看正在执行的查询
SELECT 
    r.session_id,
    s.login_name,
    r.status,
    r.command,
    r.cpu_time,
    r.total_elapsed_time,
    t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.status = 'running';

-- 查看等待统计
SELECT wait_type, waiting_tasks_count, wait_time_ms, signal_wait_time_ms
FROM sys.dm_os_wait_stats
WHERE waiting_tasks_count > 0
ORDER BY wait_time_ms DESC;

-- 查看数据库文件大小
SELECT 
    DB_NAME(database_id) AS DatabaseName,
    type_desc,
    name AS LogicalName,
    physical_name,
    CAST(size * 8.0 / 1024 AS DECIMAL(10,2)) AS SizeMB
FROM sys.master_files
WHERE database_id > 4;

9.2 索引优化

-- 查看缺失索引
SELECT 
    migs.avg_user_impact * (migs.user_seeks + migs.user_scans) AS improvement_measure,
    migs.avg_user_impact,
    migs.user_seeks,
    migs.user_scans,
    mid.statement AS TableName,
    mid.equality_columns,
    mid.inequality_columns,
    mid.included_columns
FROM sys.dm_db_missing_index_groups mig
INNER JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
INNER JOIN sys.dm_db_missing_index_details mid ON mig.index_handle = mid.index_handle
ORDER BY migs.avg_user_impact DESC;

-- 创建建议的索引
CREATE NONCLUSTERED INDEX IX_Employees_Department
ON Employees(Department)
INCLUDE (Name, Salary);

9.3 配置自动 Tuning

-- 启用自动 Tuning
ALTER DATABASE TestDB SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON);
ALTER DATABASE TestDB SET AUTOMATIC_TUNING (CREATE_INDEX = ON);
ALTER DATABASE TestDB SET AUTOMATIC_TUNING (DROP_INDEX = ON);

十、常见问题与解决方案

Q1:SQL Server启动失败?

解决方案

# 查看错误日志
cat /var/opt/mssql/log/errorlog

# 检查内存是否充足(SQL Server需要至少2GB)
free -h

# 检查磁盘空间
df -h

# 重新配置
sudo /opt/mssql/bin/mssql-conf setup

Q2:无法远程连接?

解决方案
1. 确认防火墙开放1433端口
2. 检查SQL Server TCP/IP协议启用
3. 确认TCP端口配置正确
4. 验证SA密码正确

# 检查端口监听
ss -tlnp | grep 1433

# 测试远程连接
telnet 服务器IP 1433

Q3:内存不足警告?

解决方案
1. 增加系统内存
2. 限制SQL Server内存使用
3. 检查是否有其他进程占用内存

# 设置内存限制
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 8192
sudo systemctl restart mssql-server

Q4:备份文件损坏?

解决方案
1. 验证备份完整性

RESTORE VERIFYONLY 
FROM DISK = '/var/opt/mssql/data/TestDB_Full.bak';
  1. 使用WITH CHECKSUM选项重新备份
  2. 检查磁盘健康状态

十一、总结

在CentOS上部署SQL Server是企业级数据库应用的重要选择:

  • 安装步骤:添加仓库 → 安装SQL Server → 初始化配置 → 启动服务
  • 命令行工具:安装sqlcmd用于数据库操作
  • 配置优化:内存管理、排序规则、远程连接
  • 备份恢复:完整备份、差异备份、日志备份
  • 安全配置:密码管理、权限控制、加密连接
  • 性能调优:监控查询、索引优化、自动Tuning

掌握这些部署和管理技巧,可以在Linux环境中充分利用SQL Server的强大功能。

本文基于SQL Server 2022和CentOS Stream 9编写,适用于CentOS 7+/RHEL 7+/CentOS Stream环境。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注