Linux系统下SQL Server安装与配置指南,如何在Linux系统上轻松安装和配置SQL Server?,Linux也能运行SQL Server?手把手教你轻松搞定安装与配置!

04-10 1012阅读

在数字化转型浪潮中,数据库管理系统(DBMS)已成为企业IT架构的核心支柱,微软SQL Server作为全球领先的关系型数据库解决方案,凭借其卓越的性能、可靠的安全性和丰富的功能生态,长期占据企业级数据库市场的重要地位,传统上,SQL Server主要运行于Windows平台,但随着微软"拥抱开源"战略的深入实施,自SQL Server 2017起已全面支持Linux操作系统,为开发者提供了更灵活的部署选项,实现了跨平台的无缝迁移。

Linux系统下SQL Server安装与配置指南,如何在Linux系统上轻松安装和配置SQL Server?,Linux也能运行SQL Server?手把手教你轻松搞定安装与配置! 第1张

(微软SQL Server Linux版架构示意图)

本教程将系统讲解在Linux环境中部署SQL Server的全流程,涵盖系统准备、安装配置、性能优化及通过宝塔面板管理等关键环节,无论您是数据库管理员、后端开发者还是系统运维工程师,本指南都将成为您快速掌握Linux平台SQL Server部署的实用手册,我们不仅会介绍基础安装步骤,还将深入探讨生产环境的最佳实践和性能调优技巧。

系统准备

硬件与系统要求

在开始安装前,请确认您的Linux环境满足以下基本要求,这些要求根据微软官方文档和实际生产环境经验进行了优化调整:

组件 最低要求 生产环境建议
操作系统 RHEL/CentOS 7.3+或8.0+、SLES 12 SP3+或15 SP0+、Ubuntu 16.04/18.04/20.04 RHEL/CentOS 8.x(长期支持版本)
内存 2GB 16GB+(根据数据库负载可扩展至32GB或更高)
存储空间 6GB SSD/NVMe存储,50GB+(建议使用独立的数据盘和日志盘)
CPU x64架构,2GHz双核 4核以上(建议支持AVX指令集)
文件系统 XFS/EXT4 XFS(针对大文件和高并发场景优化)
SWAP空间 无明确要求 建议为物理内存的1-1.5倍

注意事项

  1. SQL Server on Linux目前不支持ARM架构,仅限x86_64环境
  2. 生产环境强烈建议禁用透明大页(THP),可通过命令echo never > /sys/kernel/mm/transparent_hugepage/enabled设置
  3. 对于高并发场景,建议调整Linux内核参数,特别是文件描述符限制和TCP连接参数

宝塔面板预安装(可选)

对于偏好图形化管理的用户,推荐先安装宝塔面板,以下以CentOS 7为例演示安装过程:

# 安装必要依赖并下载安装脚本
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh
# 执行安装并保留详细日志(便于问题排查)
sh install.sh | tee /tmp/bt_install.log
# 安装完成后检查服务状态
systemctl status bt

安装完成后访问面板:

  • 访问地址:http://<服务器IP>:8888
  • 获取初始账号密码:执行bt default命令查看
  • 安全建议:首次登录后立即修改默认密码,并在面板设置中启用双重认证

Linux系统下SQL Server安装与配置指南,如何在Linux系统上轻松安装和配置SQL Server?,Linux也能运行SQL Server?手把手教你轻松搞定安装与配置! 第2张

(宝塔面板管理界面示例)

SQL Server核心安装流程

安全认证准备

# 导入微软官方GPG密钥(确保软件包完整性)
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
# 验证密钥指纹(应显示"Microsoft (Release signing) <gpgsecurity@microsoft.com>")
gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-microsoft-asc
# 清理现有软件包缓存
sudo yum clean all || sudo apt-get clean

配置软件仓库

根据不同Linux发行版选择对应命令:

RHEL/CentOS 7:

sudo curl -o /etc/yum.repos.d/mssql-server.repo \
  https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo

RHEL/CentOS 8:

sudo curl -o /etc/yum.repos.d/mssql-server.repo \
  https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo

Ubuntu 20.04:

sudo curl -o /etc/apt/sources.list.d/mssql-server.list \
  https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list
# 更新软件源元数据
sudo apt-get update

执行安装

CentOS/RHEL系统:

sudo yum install -y mssql-server

Ubuntu系统:

sudo apt-get install -y mssql-server

初始配置

sudo /opt/mssql/bin/mssql-conf setup

配置过程中需要:

  1. 选择版本(输入数字):

    • Evaluation(评估版) - 180天试用期
    • Developer(开发版) - 全功能免费版,仅限开发和测试环境
    • Express(快速版) - 免费版,有限制(10GB数据库大小)
    • Web版 - 针对Web托管优化
    • Standard(标准版) - 中小型企业级
    • Enterprise(企业版) - 全功能商业版
  2. 接受许可协议(输入"YES")

  3. 设置强密码(需满足:至少8字符,包含大小写字母、数字和特殊字符)

Linux系统下SQL Server安装与配置指南,如何在Linux系统上轻松安装和配置SQL Server?,Linux也能运行SQL Server?手把手教你轻松搞定安装与配置! 第3张

(SQL Server版本选择界面)

服务管理

# 检查详细运行状态(显示完整日志)
systemctl status mssql-server --no-pager -l
# 设置开机自启
sudo systemctl enable mssql-server
# 重启服务(配置变更后需要)
sudo systemctl restart mssql-server
# 查看服务启动日志
journalctl -u mssql-server -n 50 --no-pager

防火墙配置

# 开放默认端口(1433/TCP)
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload
# 验证端口开放状态
sudo firewall-cmd --list-ports | grep 1433
# 对于Ubuntu系统使用ufw
sudo ufw allow 1433/tcp
sudo ufw reload

管理工具安装

命令行工具集

CentOS/RHEL:

sudo curl -o /etc/yum.repos.d/msprod.repo \
  https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools unixODBC-devel

Ubuntu:

sudo curl -o /etc/apt/sources.list.d/msprod.list \
  https://packages.microsoft.com/config/ubuntu/20.04/prod.list
sudo apt-get update
sudo apt-get install -y mssql-tools unixodbc-dev

环境变量配置

# 永久添加PATH(所有用户)
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' | sudo tee /etc/profile.d/mssql-tools.sh
# 当前会话生效
source /etc/profile.d/mssql-tools.sh
# 验证工具可用性
which sqlcmd
which bcp

连接测试

# 基本连接测试
sqlcmd -S localhost -U sa -P '<您的密码>'
# 带超时设置的连接(网络不稳定时有用)
sqlcmd -S localhost -U sa -P '<密码>' -l 30

成功连接后执行示例查询:

-- 获取SQL Server版本信息
SELECT @@VERSION AS 'SQL Server Version';
-- 查看基础配置
SELECT name, value, value_in_use 
FROM sys.configurations 
WHERE name IN ('max server memory (MB)', 'cost threshold for parallelism', 'max degree of parallelism');
GO

宝塔面板集成方案

数据库管理插件

虽然宝塔原生不支持SQL Server,可通过以下方案实现图形化管理:

# 安装Adminer全能数据库管理工具(轻量级PHP解决方案)
wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1-en.php \
  -O /www/wwwroot/adminer.php
# 设置适当权限
chown www:www /www/wwwroot/adminer.php
chmod 644 /www/wwwroot/adminer.php

访问方式:http://<服务器IP>/adminer.php

连接参数:

  • 系统:选择"SQL Server"
  • 服务器:localhost
  • 用户名:sa
  • 密码:安装时设置的密码

端口转发配置

  1. 在宝塔面板创建新站点(建议使用独立域名或子域名)
  2. 进入"反向代理"设置
  3. 添加代理规则:
    • 目标URL:http://127.0.0.1:1433
    • 发送域名:$host
    • 高级设置:添加以下头信息
      Proxy-Connection: keep-alive
      X-Forwarded-For: $remote_addr

监控集成

通过宝塔的"计划任务"实现自动化监控:

#!/bin/bash
# SQL Server健康检查脚本
LOG_FILE="/var/log/mssql-monitor.log"
# 检查服务状态
if ! systemctl is-active --quiet mssql-server; then
    systemctl restart mssql-server
    echo "$(date) - SQL Server服务异常,已执行重启" >> $LOG_FILE
    # 可添加邮件或钉钉通知
fi
# 检查资源使用
MEM_USAGE=$(ps -C sqlservr -o %mem --no-headers)
CPU_USAGE=$(ps -C sqlservr -o %cpu --no-headers)
if (( $(echo "$MEM_USAGE > 90" | bc -l) )); then
    echo "$(date) - 内存使用过高: $MEM_USAGE%" >> $LOG_FILE
fi
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
    echo "$(date) - CPU使用过高: $CPU_USAGE%" >> $LOG_FILE
fi

高级配置指南

性能优化

# 调整内存限制(单位MB,建议为物理内存的70-80%)
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 12288
# 设置并行度(根据CPU核心数,通常4-8之间)
sudo /opt/mssql/bin/mssql-conf set optimizer.maxdop 4
# 配置临时数据库位置(建议使用高性能存储)
sudo mkdir -p /mnt/tempdb
sudo chown mssql:mssql /mnt/tempdb
sudo /opt/mssql/bin/mssql-conf set filelocation.mssqlsystemtempdb /mnt/tempdb
# 启用即时文件初始化(提升数据文件创建速度)
sudo /opt/mssql/bin/mssql-conf set filelocation.enableinstantfileinitialization 1

安全加固

# 强制加密所有连接
sudo /opt/mssql/bin/mssql-conf set network.forceencryption 1
# 更改默认端口(减少自动化攻击风险)
sudo /opt/mssql/bin/mssql-conf set network.tcpport 11433
sudo firewall-cmd --zone=public --add-port=11433/tcp --permanent
sudo firewall-cmd --reload
# 启用登录审计(记录所有登录尝试)
sudo mkdir -p /var/opt/mssql/audit
sudo chown mssql:mssql /var/opt/mssql/audit
sudo /opt/mssql/bin/mssql-conf set telemetry.userrequestedlocalauditdirectory /var/opt/mssql/audit
# 限制SA账户远程登录(建议创建专用管理账户)
sqlcmd -S localhost -U sa -P '<密码>' -Q "
CREATE LOGIN [admin_user] WITH PASSWORD = '<强密码>';
ALTER SERVER ROLE [sysadmin] ADD MEMBER [admin_user];"

备份与恢复策略

自动化备份

#!/bin/bash
# 数据库备份脚本
BACKUP_DIR="/var/opt/mssql/backup"
LOG_FILE="/var/log/mssql-backup.log"
DB_NAME="YourDB"
SA_PASSWORD="<密码>"
# 创建备份目录
mkdir -p $BACKUP_DIR
chown mssql:mssql $BACKUP_DIR
# 执行备份
echo "$(date) - 开始备份数据库 $DB_NAME" >> $LOG_FILE
sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "
BACKUP DATABASE [$DB_NAME] 
TO DISK='$BACKUP_DIR/${DB_NAME}_FULL_$(date +%Y%m%d_%H%M%S).bak'
WITH COMPRESSION, STATS=5, CHECKSUM;
GO" >> $LOG_FILE 2>&1
# 验证备份完整性
sqlcmd -S localhost -U sa -P $SA_PASSWORD -Q "
RESTORE VERIFYONLY 
FROM DISK='$BACKUP_DIR/${DB_NAME}_FULL_$(date +%Y%m%d_%H%M%S).bak'
WITH CHECKSUM;
GO" >> $LOG_FILE 2>&1
# 清理旧备份(保留最近7天)
find $BACKUP_DIR -name "${DB_NAME}_FULL_*.bak" -mtime +7 -exec rm {} \;
echo "$(date) - 备份完成并清理旧文件" >> $LOG_FILE

灾难恢复

# 从备份恢复完整数据库
sqlcmd -S localhost -U sa -P '<密码>' -Q "
RESTORE DATABASE [YourDB] 
FROM DISK='$BACKUP_DIR/YourDB_FULL_20230501.bak'
WITH REPLACE, STATS=5, RECOVERY;
GO"
# 时间点恢复(需要完整备份+日志备份)
sqlcmd -S localhost -U sa -P '<密码>' -Q "
RESTORE DATABASE [YourDB] 
FROM DISK='$BACKUP_DIR/YourDB_FULL.bak'
WITH NORECOVERY, REPLACE;
RESTORE LOG [YourDB] 
FROM DISK='$BACKUP_DIR/YourDB_LOG.trn'
WITH STOPAT='2023-05-01 12:00:00', RECOVERY;
GO"

容器化部署方案(可选)

对于需要快速部署和弹性扩展的场景,推荐使用Docker方案:

# 拉取官方镜像(指定版本标签)
sudo docker pull mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04
# 运行容器(生产环境建议添加资源限制)
sudo docker run -d \
  --name sqlserver \
  --hostname sqlserver \
  --restart unless-stopped \
  -e 'ACCEPT_EULA=Y' \
  -e 'SA_PASSWORD=<强密码>' \
  -e 'MSSQL_PID=Enterprise' \
  -p 1433:1433 \
  -v /mnt/mssql/data:/var/opt/mssql/data \
  -v /mnt/mssql/log:/var/opt/mssql/log \
  -v /mnt/mssql/backup:/var/opt/mssql/backup \
  --memory="16g" \
  --cpus=4 \
  mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04
# 验证容器状态
docker logs sqlserver -n 50

常见问题排查

连接问题

# 检查服务是否监听正确端口
sudo netstat -tulnp | grep sqlservr
# 查看详细错误日志
tail -100 /var/opt/mssql/log/errorlog
# 测试本地连接(绕过网络层)
/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P '<密码>'
# 检查防火墙规则
sudo iptables -L -n | grep 1433

性能问题

# 实时监控资源占用
top -p $(pgrep sqlservr)
# 查询当前活动会话和阻塞情况
sqlcmd -S localhost -U sa -P '<密码>' -Q "
SELECT 
    session_id, 
    login_name, 
    status, 
    cpu_time, 
    memory_usage,
    reads,
    writes,
    logical_reads
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;
GO"
# 检查等待统计
sqlcmd -S localhost -U sa -P '<密码>' -Q "
SELECT 
    wait_type,
    waiting_tasks_count,
    wait_time_ms,
    max_wait_time_ms
FROM sys.dm_os_wait_stats
ORDER BY wait_time_ms DESC;
GO"

通过本指南,您已全面掌握在Linux系统部署SQL Server的核心技术,从传统Windows平台到Linux环境的跨越,体现了现代数据库系统的跨平台趋势和云原生发展方向,建议进一步探索:

  1. 高可用方案:配置Always On可用性

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]