Ubuntu 上 SQL Server 的更新与维护指南
一 更新前准备
- 备份与验证:对所有关键数据库执行完整备份,并验证可恢复性;如条件允许,在测试环境完成升级演练。
- 维护窗口与变更记录:选择业务低峰期,提前通知业务方并记录变更步骤与回退方案。
- 系统与仓库核对:确认 Ubuntu 版本受支持(SQL Server 2019 支持 Ubuntu 20.04;SQL Server 2022 支持 Ubuntu 20.04/22.04),并确保已导入 Microsoft GPG 公钥、配置了正确的 Microsoft SQL Server 仓库;若曾安装 CTP/RC 版本,需先移除旧仓库以避免冲突。
- 服务与连接:确认具备 sudo 权限,了解如何启动/停止服务与开放防火墙端口(默认 1433/TCP)。
二 补丁与版本升级
- 就地小版本升级(推荐):在支持的 Ubuntu 版本上,通过 APT 执行以下命令即可完成 SQL Server 小版本与安全补丁升级:
- 备份数据库;2) 执行:sudo apt-get update && sudo apt-get install -y mssql-server;3) 验证服务:systemctl status mssql-server --no-pager;4) 连接实例核验版本与补丁级别。
- 跨版本升级(如 2019 → 2022):先备份,再移除旧版本仓库,导入新版本仓库(对应目标 Ubuntu 版本),执行 sudo apt-get update && sudo apt-get install -y mssql-server,随后运行 sudo /opt/mssql/bin/mssql-conf setup 完成配置,最后重启并验证。
- 回退策略:跨版本升级前保留现有仓库与安装包,出现异常时优先回滚至升级前快照/备份,再恢复仓库与版本。
三 日常维护清单
- 备份策略:制定并执行定期备份(如每日完整 + 每小时日志),定期校验备份可用性与保留周期。
- 统计信息与索引:定期更新统计信息(UPDATE STATISTICS)并重建/重组碎片化严重的索引,保持查询性能稳定。
- 磁盘与空间:监控数据/日志文件所在磁盘使用率,及时扩容或清理无用文件。
- 安全与合规:定期更换 SA 密码,仅开放必要端口与来源 IP,及时应用 OS 与 SQL Server 安全补丁。
- 代理作业:如需定时任务(备份、清理等),启用 SQL Server Agent:sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true && sudo systemctl restart mssql-server。
四 常用维护命令速查
- 服务管理:
- 查看状态:systemctl status mssql-server --no-pager
- 重启:sudo systemctl restart mssql-server
- 备份与还原:
- 备份:sqlcmd -S localhost -E -Q “BACKUP DATABASE [YourDatabaseName] TO DISK = ‘/path/backup.bak’”
- 配置调整:
- 启用代理:sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
- 调整默认数据/日志目录:
sudo mkdir -p /home/d/mssql/data
sudo chown mssql:mssql /home/d/mssql/data
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /home/d/mssql/data
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /home/d/mssql/data
sudo systemctl restart mssql-server
- 防火墙:sudo ufw allow 1433/tcp
- 版本核验:连接实例后执行 SELECT @@VERSION 与 @@PACKAGEVERSION 查看版本与补丁级别。
五 常见问题与排错
- 依赖缺失(示例):
- 报错 “error while loading shared libraries: liblber-2.4.so.2”:安装对应版本的 libldap-2.4-2 包后重试。
- 报错 “error while loading shared libraries: libssl1.1”:安装对应版本的 libssl1.1 包后重试。
- 仓库冲突:曾安装 CTP/RC 版本未移除旧仓库会导致安装/升级失败,需先移除旧仓库再添加正确仓库。
- 连接与端口:远程无法连接时,确认 ufw/云安全组 已放行 1433/TCP,实例监听正常且应用连接字符串正确。