Ubuntu 上部署 Microsoft SQL Server 详细教程
Microsoft SQL Server 自 2017 年起开始支持 Linux 系统,包括 Ubuntu。本文将详细介绍如何在 Ubuntu 20.04/22.04/24.04 系统上安装和配置 Microsoft SQL Server,并验证其运行状态。
核心架构与组件
- 数据库引擎
- 存储、处理和保护数据的核心组件,支持T-SQL查询、事务管理(ACID)和锁机制。
- 关键组件:存储引擎(数据文件管理)、查询处理器(执行计划生成)、缓冲池(内存管理)。
- SQL Server 服务
- SQL Server Database Engine:处理数据存储和查询。
- SQL Server Agent:自动化任务调度(如备份、维护计划)。
- SSIS (Integration Services):ETL工具,用于数据迁移和转换。
- SSAS (Analysis Services):多维数据分析和数据挖掘。
- SSRS (Reporting Services):报表生成和分发。
- 内存管理
- 缓冲池(Buffer Pool):缓存数据页,减少磁盘I/O。
- 列存储索引(Columnstore Index):优化分析查询性能。
T-SQL 编程
- 基础语法
- 数据定义语言(DDL):
CREATE,ALTER,DROP(表、视图、存储过程等)。 - 数据操作语言(DML):
INSERT,UPDATE,DELETE,MERGE。 - 数据查询语言(DQL):
SELECT结合JOIN,GROUP BY,HAVING,WINDOW FUNCTIONS(如ROW_NUMBER())。
- 数据定义语言(DDL):
- 存储过程与函数
- 存储过程:预编译的T-SQL块,支持参数输入/输出。
- 标量函数:返回单个值(如
DATEDIFF)。 - 表值函数:返回表结构(如
STRING_SPLIT)。
- 事务与错误处理
- 事务控制:
BEGIN TRANSACTION,COMMIT,ROLLBACK。 - 错误处理:
TRY...CATCH块,结合ERROR_NUMBER(),ERROR_MESSAGE()。
- 事务控制:
性能优化
- 索引策略
- 聚集索引:表数据按索引顺序存储(每表仅一个)。
- 非聚集索引:独立于数据存储,支持覆盖索引优化。
- 筛选索引:针对特定数据子集(如
WHERE Status = 'Active')。
- 查询优化
- 执行计划分析:使用
SQL Server Profiler或Extended Events捕获慢查询。 - 参数嗅探问题:通过
OPTION (RECOMPILE)或局部变量缓解。 - 统计信息更新:
UPDATE STATISTICS确保优化器准确估算。
- 执行计划分析:使用
- 高可用性方案
- Always On 可用性组:主副本+多个辅助副本,支持读写分离。
- 故障转移群集(FCI):共享存储架构,提供自动故障转移。
- 日志传送:异步备份/恢复,适用于低延迟要求场景。
安全机制
- 认证与授权
- Windows 认证:集成域账户。
- SQL Server 认证:独立用户名/密码。
- 角色管理:
db_owner,db_datareader等固定数据库角色。
- 数据加密
- 透明数据加密(TDE):加密整个数据库文件。
- 列级加密:使用
ENCRYPTBYKEY或ALWAYS ENCRYPTED(客户端加密)。
- 审计与合规
- SQL Server 审计:跟踪登录、DDL/DML操作。
- 动态数据掩码:隐藏敏感数据(如
PHONE显示为XXX-XXX-1234)。
高级功能
- JSON 支持
- 解析:
JSON_VALUE,JSON_QUERY。 - 生成:
FOR JSON PATH格式化查询结果。
- 解析:
- ** temporal 表**
- 系统版本化表:自动记录数据历史版本(
SYSSTART,SYSEND列)。
- 系统版本化表:自动记录数据历史版本(
- PolyBase
- 连接外部数据源(如Hadoop、Azure Blob Storage),支持T-SQL查询。
维护与管理
- 备份与恢复
- 完整备份:
BACKUP DATABASE [Name] TO DISK。 - 差异备份:仅备份自上次完整备份后的更改。
- 时间点恢复:结合事务日志备份(
RESTORE LOG WITH STOPAT)。
- 完整备份:
- 自动化任务
- 维护计划:通过SSMS向导创建定期任务(重建索引、更新统计信息)。
- 作业调度:SQL Server Agent 执行自定义脚本。
- 监控工具
- 动态管理视图(DMV):如
sys.dm_exec_requests监控活动查询。 - Performance Monitor:跟踪
SQLServer:Buffer Manager等计数器。
- 动态管理视图(DMV):如
云集成(Azure SQL Database)
- 托管实例
- 兼容本地SQL Server,支持跨数据库事务和链接服务器。
- 弹性池
- 共享资源池,优化多数据库成本。
- Geo-Replication
- 跨区域复制,实现灾难恢复。
一、开始安装
1. 更新软件包列表
sudo apt update
2. 安装必要依赖
sudo apt install -y curl wget gnupg2 net-tools
二、添加 Microsoft SQL Server 软件源
1. 导入 Microsoft GPG 公钥
curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
2. 添加 SQL Server Ubuntu 软件源
根据你的 Ubuntu 版本选择对应的命令:
Ubuntu 20.04 (Focal)
echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/20.04/mssql-server-2022 focal main" | sudo tee /etc/apt/sources.list.d/mssql-server.list
Ubuntu 22.04 (Jammy)
echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/22.04/mssql-server-2022 jammy main" | sudo tee /etc/apt/sources.list.d/mssql-server.list
三、安装 SQL Server
1. 更新软件包列表
sudo apt update
2. 安装 SQL Server
sudo apt install -y mssql-server
四、配置 SQL Server
安装完成后,需要运行配置脚本来设置系统管理员(SA)密码和选择版本。
sudo /opt/mssql/bin/mssql-conf setup
系统会提示你:
- 选择版本:
- (1) Evaluation (评估版):功能最全的180天试用版,过期即停。
- (2) Developer (开发版):功能同企业版,但禁止用于生产,专供开发。
- (3) Express (精简版):功能最弱的免费版,适合学习和微型应用。
- (4) Web (Web版):为网站托管设计的付费版。
- (5) Standard (标准版):性价比最高的付费版,满足多数企业需求。
- (6) Enterprise (企业版):功能最强,但CPU核心数被限制(20物理/40超线程)。
- (7) Enterprise Core (企业核心版):功能最强,无CPU核心数限制,性能拉满。
- (8) 产品密钥:一个激活选项,用于激活你已购买的本地付费版。
- (9) Standard (Azure计费):在微软云上按小时付费使用的标准版。
- (10) Enterprise Core (Azure计费):在微软云上按小时付费使用的企业核心版。
-
接受许可协议:输入
YES。 -
设置 SA 用户密码:
- 密码长度 ≥ 8 位
- 必须包含大写字母、小写字母、数字和特殊字符
例如:MyS@qlP@ssw0rd!
配置成功后,服务会自动启动。
推荐开发测试使用 Developer (2)。

五、验证 SQL Server 是否运行
1. 检查服务状态
systemctl status mssql-server

2. 检查监听端口(默认 1433)
ss -tulnp | grep 1433

六、安装 SQL Server 命令行工具
为了能在本地连接和管理数据库,建议安装 sqlcmd 和 bcp 工具。
1. 添加 Microsoft Linux 软件源(客户端工具)
curl https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft-prod.gpg
然后添加源(以 Ubuntu 22.04 为例):
echo "deb [arch=amd64] https://packages.microsoft.com/ubuntu/22.04/prod jammy main" | sudo tee /etc/apt/sources.list.d/msprod.list
2. 安装工具
sudo apt update
sudo apt install -y mssql-tools unixodbc-dev
3. 添加环境变量
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
七、连接并测试数据库
使用 sqlcmd 连接本地 SQL Server
sqlcmd -S localhost -U SA -P 'MyS@qlP@ssw0rd!'
注意:密码中若含特殊字符(如
$、!),建议用单引号包裹。
进入交互界面后,输入以下 T-SQL 命令测试:
SELECT @@VERSION;
GO

退出:
QUIT
八、常用管理命令
| 功能 | 命令 |
|---|---|
| 启动服务 | sudo systemctl start mssql-server |
| 停止服务 | sudo systemctl stop mssql-server |
| 重启服务 | sudo systemctl restart mssql-server |
| 查看日志 | sudo journalctl -u mssql-server -f |
| 修改 SA 密码 | sudo /opt/mssql/bin/mssql-conf set-sa-password |
九、卸载 SQL Server
# 移除包
sudo apt remove mssql-server# 清理数据和配置(⚠️ 慎用!会删除所有数据库!)
sudo rm -rf /var/opt/mssql/
十、常见问题排查
1. 服务无法启动?
查看日志:
sudo journalctl -u mssql-server --since today
常见原因:
- 内存不足(<2GB)
- SA 密码不符合复杂度要求
- 磁盘空间不足
2. 连接被拒绝?
- 检查
systemctl status mssql-server - 确认端口 1433 是否监听:
ss -tuln | grep 1433 - 检查防火墙设置
通过以上步骤,你已在 Ubuntu 系统上成功部署 Microsoft SQL Server。无论是用于开发、测试还是轻量级生产环境,SQL Server on Linux 都提供了强大的关系型数据库能力。
