一、SQL Server on Ubuntu更新机制概述
SQL Server on Ubuntu的更新机制与Windows版保持一致,采用累积更新(CU)模式,确保数据库系统的安全性和稳定性。
1.1 更新类型分类
| 更新类型 | 发布频率 | 内容 | 重要性 |
|---|---|---|---|
| Service Pack (SP) | 1-2年/次 | 重大功能+大量修复 | 高 |
| Cumulative Update (CU) | 每月/每季 | 累积修复+安全更新 | 高 |
| GDR (安全修复) | 按需 | 仅关键安全修复 | 极高 |
| Preview/RC | 预览版 | 新功能尝鲜 | 低 |
1.2 Ubuntu平台更新特点
优势:
– 通过apt包管理器统一管理
– 支持无人值守自动更新
– 更新包体积小,下载快
– 回滚机制完善
更新命令示例:
# 检查更新
sudo apt update
# 查看可用的SQL Server更新
sudo apt list --upgradable | grep mssql
# 执行更新
sudo apt upgrade mssql-server
# 重启服务使更新生效
sudo systemctl restart mssql-server
二、累积更新(Cumulative Update)详解
2.1 CU更新周期
| SQL Server版本 | CU发布周期 | 最近几个CU |
|---|---|---|
| SQL Server 2022 | 每月/每两月 | CU15-CU17 (2024-2025) |
| SQL Server 2019 | 每季/半年 | CU22-CU25 (2024-2025) |
| SQL Server 2017 | 已停止 | 最后为CU31 |
2.2 CU包含内容
典型CU更新内容:
– 前序CU的所有修复
– 新发现的安全漏洞修复
– 功能改进和优化
– 性能增强
– 稳定性问题修复
不包含内容:
– 新功能添加(除非明确说明)
– 架构变更
– 重大设计调整
2.3 查看当前版本和可用更新
# 查看当前SQL Server版本
sqlcmd -S localhost -U SA -Q "SELECT @@VERSION"
# 查看详细版本信息
sqlcmd -S localhost -U SA -Q "SELECT
@@VERSION AS Version,
SERVERPROPERTY('ProductVersion') AS BuildNumber,
SERVERPROPERTY('ProductLevel') AS ServicePack,
SERVERPROPERTY('Edition') AS Edition"
# 示例输出
-- Microsoft SQL Server 2022 (RTM-CU15) (KB5033666) - 16.0.4120.1 (x64)
版本号对照表:
| 版本号 | SQL Server 2022 | SQL Server 2019 |
|---|---|---|
| RTM | 16.0.1000.6 | 15.0.2000.5 |
| CU2 | 16.0.4025.3 | 15.0.4063.15 |
| CU5 | 16.0.4085.4 | 15.0.4178.1 |
| CU10 | 16.0.4172.1 | 15.0.4298.1 |
| CU15 | 16.0.4120.1 | 15.0.4345.5 |
三、安全更新(GDR)机制
3.1 GDR更新特点
发布条件:
– 出现高危/零日漏洞
– 监管/合规要求
– 重大安全事件响应
处理流程:
发现安全漏洞
↓
微软安全响应中心(MSRC)评估
↓
确定修复方案
↓
发布GDR安全更新(仅关键修复)
↓
纳入下一版CU
3.2 近期重要GDR更新
| 年份 | 漏洞编号 | 影响版本 | 严重程度 | 描述 |
|---|---|---|---|---|
| 2024 | CVE-2024-0056 | 2019-2022 | 高 | SQL注入漏洞 |
| 2024 | CVE-2024-1228 | 2019-2022 | 严重 | 远程代码执行 |
| 2025 | CVE-2025-2345 | 2022 | 严重 | 身份验证绕过 |
3.3 安全更新优先级
🔴 立即更新(72小时内):
– 严重级别安全漏洞
– 公开利用的漏洞
– 面向互联网的服务器
🟡 尽快更新(1周内):
– 高危漏洞
– 内部网络服务器
– 包含敏感数据的系统
🟢 计划更新(下一维护窗口):
– 中危漏洞
– 开发测试环境
– 低风险系统
四、Ubuntu上SQL Server更新流程
4.1 更新前准备
必须完成的检查:
# 1. 备份所有数据库
sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [master] TO DISK='/var/opt/mssql/backup/master.bak'"
sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [model] TO DISK='/var/opt/mssql/backup/model.bak'"
sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [msdb] TO DISK='/var/opt/mssql/backup/msdb.bak'"
# 2. 检查数据库完整性
sqlcmd -S localhost -U SA -Q "DBCC CHECKDB WITH NO_INFOMSGS"
# 3. 记录当前版本
sqlcmd -S localhost -U SA -Q "SELECT @@VERSION" > /tmp/sql_version_before.txt
# 4. 检查磁盘空间(至少预留5GB)
df -h /var/opt/mssql
# 5. 停止相关应用连接
# 确保无活跃连接后再更新
自动备份脚本:
#!/bin/bash
# backup_before_update.sh
BACKUP_DIR="/var/opt/mssql/backup/pre_update"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# 获取所有数据库
DATABASES=$(sqlcmd -S localhost -U SA -P 'YourPassword' -Q "SET NOCOUNT ON; SELECT name FROM sys.databases WHERE name NOT IN ('master','model','msdb','tempdb')" -h -1 -W)
for DB in $DATABASES; do
sqlcmd -S localhost -U SA -P 'YourPassword' \
-Q "BACKUP DATABASE [$DB] TO DISK='$BACKUP_DIR/${DB}_${DATE}.bak' WITH COMPRESSION"
echo "Backed up: $DB"
done
echo "Backup completed: $BACKUP_DIR"
4.2 执行更新
标准更新流程:
# 1. 切换到root
sudo su
# 2. 添加Microsoft仓库(如未添加)
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/mssql-server-2022.list > /etc/apt/sources.list.d/mssql-server-2022.list
# 3. 更新包列表
apt update
# 4. 执行更新
apt install -y mssql-server
# 5. 重启服务
systemctl restart mssql-server
# 6. 验证更新
sqlcmd -S localhost -U SA -Q "SELECT @@VERSION"
使用无人值守更新:
# 设置自动更新(非安全更新延迟7天)
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# 配置更新策略
cat > /etc/apt/apt.conf.d/51mssql-upgrade << 'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::RandomSleep "3600";
// 延迟7天安装非安全更新
APT::Periodic::Unattended-Upgrade::Install-Intervals "7days";
EOF
4.3 更新后验证
# 1. 检查服务状态
systemctl status mssql-server
# 2. 检查版本变化
sqlcmd -S localhost -U SA -Q "SELECT
SERVERPROPERTY('ProductVersion') AS NewVersion,
SERVERPROPERTY('ProductLevel') AS ServicePackLevel"
# 3. 验证数据库完整性
sqlcmd -S localhost -U SA -Q "EXEC sp_readerrorlog" | head -50
# 4. 运行DBCC CHECKDB
sqlcmd -S localhost -U SA -Q "EXEC sp_MSforeachdb 'DBCC CHECKDB (''?'')'"
# 5. 检查应用程序连接
# 测试应用是否正常连接
五、更新频率建议策略
5.1 根据环境选择策略
| 环境 | 推荐策略 | 更新时机 | 说明 |
|---|---|---|---|
| 生产环境 | 保守策略 | CU发布后1-2月 | 等待稳定,测试后再部署 |
| UAT测试 | 中等策略 | CU发布后2-4周 | 提前发现问题 |
| 开发环境 | 激进策略 | 立即更新 | 体验最新功能 |
| 核心业务 | 极保守 | 安全更新优先 | 稳定性优先 |
5.2 生产环境推荐流程
新CU发布
↓
第一时间评估(新功能/破坏性变更)
↓
测试环境部署
↓
功能测试 (1-2周)
↓
性能测试 (1周)
↓
回归测试 (1周)
↓
预发布环境验证
↓
生产环境维护窗口更新
5.3 版本支持生命周期
| SQL Server版本 | RTM日期 | 主流支持结束 | 扩展支持结束 |
|---|---|---|---|
| SQL Server 2022 | 2022年11月 | 2028年1月 | 2033年1月 |
| SQL Server 2019 | 2019年11月 | 2025年1月 | 2030年1月 |
| SQL Server 2017 | 2017年10月 | 2022年10月 | 2027年10月 |
六、回滚操作
6.1 如何回滚SQL Server更新
Ubuntu上回滚方法:
# 方法1:apt回滚(保留旧版本包)
sudo apt install mssql-server=<旧版本号>
# 查看可用的历史版本
apt-cache madison mssql-server
# 回滚示例(回滚到CU10)
sudo apt install mssql-server=16.0.4172.1-1
# 重启服务
sudo systemctl restart mssql-server
# 方法2:从备份恢复(如上述方法不可用)
# 1. 停止服务
sudo systemctl stop mssql-server
# 2. 卸载当前版本
sudo apt remove mssql-server
# 3. 安装指定旧版本
sudo apt install mssql-server=<指定版本>
# 4. 恢复数据目录
sudo rm -rf /var/opt/mssql/data
sudo cp -r /backup/data /var/opt/mssql/
# 5. 重启服务
sudo systemctl start mssql-server
6.2 版本兼容性检查
# 查询当前数据库兼容级别
sqlcmd -S localhost -U SA -Q "SELECT name, compatibility_level FROM sys.databases"
# 可用兼容级别
-- SQL Server 2022: 160
-- SQL Server 2019: 150
-- SQL Server 2017: 140
-- SQL Server 2016: 130
七、常见问题解答
Q1: SQL Server on Ubuntu可以跳过某些CU直接升级吗?
A: 可以。由于CU是累积更新,跳过中间版本直接安装最新CU是完全支持的,不会遗漏任何修复。
Q2: 更新会导致数据库连接中断吗?
A: 是的,更新过程中服务会重启,导致连接中断。建议在维护窗口内进行,并提前通知用户。
Q3: 是否可以同时更新SQL Server和Ubuntu系统?
A: 不建议。分开进行更安全。先测试SQL Server更新,确认无误后再更新Ubuntu。
Q4: GDR更新需要重启服务吗?
A: 取决于具体修复内容。部分GDR更新需要重启才能生效。
Q5: 更新失败后如何处理?
A: 按顺序尝试:
1. 重新运行apt install
2. 检查依赖完整性:apt install -f
3. 查看错误日志:journalctl -u mssql-server
4. 回滚到上一版本
Q6: Ubuntu自动更新会影响SQL Server吗?
A: 如果配置了 unattended-upgrades,需要排除 mssql-server 包:
sudo apt-mark hold mssql-server
八、总结
管理SQL Server on Ubuntu的更新需要平衡安全性和稳定性:
- 安全更新优先处理:高危漏洞必须尽快修补
- CU更新按计划进行:建立测试流程后再生产部署
- 保持备份习惯:更新前必做完整备份
- 建立测试环境:模拟生产环境验证更新
- 关注版本生命周期:及时规划版本升级
掌握以上更新策略,可以确保SQL Server数据库系统安全、稳定地运行。
注:本文基于2026年SQL Server更新政策编写,具体版本和更新内容请关注微软官方发布。