
1. 项目概述与核心价值最近在帮一个朋友的公司做技术架构迁移他们有个老旧的业务系统核心数据一直跑在Windows Server上的SQL Server里。随着业务量增长单台Windows服务器的运维成本和性能瓶颈越来越明显老板拍板决定要把数据库迁移到Linux服务器集群上实现高可用和弹性伸缩。这个需求听起来简单但真动手把SQL Server装到Linux上尤其是从零开始中间踩的坑可真不少。网上教程要么是官方文档的直译语焉不详要么就是跳步严重缺了关键配置导致装好了连不上或者性能稀烂。所以我决定把这次从裸机Linux到SQL Server数据库服务可用的完整过程包括所有的前置检查、细节配置和避坑指南手把手地记录下来。这篇文章就是给那些需要在Linux环境下部署SQL Server的运维工程师、后端开发者看的无论你是为了降低成本、统一技术栈还是为了追求更好的性能与稳定性跟着这篇指南走都能让你少走至少80%的弯路稳稳当当地把数据库服务跑起来。2. 环境准备与系统调优在真正执行安装命令之前充分且正确的环境准备是成功的一半。很多人安装失败问题都出在这一步。2.1 系统选择与基础配置首先选择哪个Linux发行版就很关键。微软官方为SQL Server提供了对RHEL (Red Hat Enterprise Linux)、Ubuntu、SLES (SUSE Linux Enterprise Server)以及它们的衍生版本如CentOS、Rocky Linux对应RHEL的官方支持。我这次以Ubuntu 22.04 LTS为例因为它用户基数大社区资源丰富遇到问题更容易找到解决方案。当然如果你是企业环境RHEL或它的免费替代品Rocky Linux可能是更稳妥的选择。安装好系统后第一件事不是急着装数据库而是做基础加固和更新# 1. 更新系统包索引并升级所有包 sudo apt update sudo apt upgrade -y # 2. 设置主机名可选但建议 sudo hostnamectl set-hostname sqlserver-db01 # 3. 配置静态IP生产环境必须 # 编辑 /etc/netplan/00-installer-config.yaml根据你的网络情况配置 sudo nano /etc/netplan/00-installer-config.yaml # 示例配置 # network: # ethernets: # ens33: # addresses: [192.168.1.100/24] # gateway4: 192.168.1.1 # nameservers: # addresses: [8.8.8.8, 114.114.114.114] sudo netplan apply # 4. 关闭不必要的服务如防火墙先关闭以便测试后续再配置 sudo ufw disable注意生产环境中我们会在安装完成后再针对性开放SQL Server端口默认1433而不是直接关闭防火墙。这里先关闭是为了排除网络干扰快速验证安装。2.2 硬件与内核参数调优SQL Server对内存和I/O比较敏感默认的Linux内核参数可能不是最优的。我们需要进行针对性调整。内存与交换空间检查确保物理内存足够建议至少4GB并正确配置交换空间。如果内存不足安装程序可能会报错。# 查看内存和交换空间 free -h # 如果Swap为0需要创建假设已有/swapfile sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效编辑 /etc/fstab添加/swapfile none swap sw 0 0内核参数优化编辑/etc/sysctl.conf在文件末尾添加以下参数。这些参数主要优化内存管理、文件句柄和网络性能是SQL Server在Linux上稳定运行的推荐配置。sudo nano /etc/sysctl.conf # 添加以下内容 # 提高系统最大文件句柄数 fs.file-max 2097152 # 提高进程可打开文件数限制 fs.nr_open 2097152 # 内存相关优化 # 减少交换倾向让SQL Server更多使用物理内存 vm.swappiness 1 # 控制脏页写回磁盘的频率提高I/O性能 vm.dirty_ratio 80 vm.dirty_background_ratio 5 # 网络相关优化 # 增加TCP最大缓冲区大小 net.core.rmem_default 262144 net.core.wmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_max 4194304 net.ipv4.tcp_rmem 4096 87380 4194304 net.ipv4.tcp_wmem 4096 65536 4194304 # 启用TCP快速打开 net.ipv4.tcp_fastopen 3 # 使配置立即生效 sudo sysctl -p设置资源限制编辑/etc/security/limits.conf为运行SQL Server的账户通常是mssql设置资源限制防止其耗尽系统资源。sudo nano /etc/security/limits.conf # 在文件末尾添加 mssql soft nofile 65536 mssql hard nofile 65536 mssql soft nproc 65536 mssql hard nproc 65536修改后需要重启服务器或重新登录会话才能生效。这一步很多人会忽略但在高并发场景下文件描述符耗尽会导致连接失败。2.3 安装依赖与工具SQL Server的运行需要一些基础库同时安装一些常用工具便于后续管理。# 安装基础工具和依赖 sudo apt install -y curl wget software-properties-common apt-transport-https ca-certificates gnupg lsb-release # 安装网络诊断工具后续排错有用 sudo apt install -y net-tools iputils-ping traceroute # 对于Ubuntu 22.04可能需要安装较新版本的OpenSSL和libssl sudo apt install -y openssl libssl-dev做完这些你的Linux系统才算是一个合格的数据库宿主机。接下来我们就可以开始引入正主——SQL Server了。3. SQL Server安装与核心配置这是最核心的环节。我们将通过微软官方仓库进行安装确保获得稳定且受支持的版本。3.1 添加微软GPG密钥与软件仓库微软为Linux提供了专门的软件仓库我们需要将其添加到系统的源列表中。# 导入微软GPG公钥用于验证软件包签名 curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg # 为Ubuntu 22.04添加SQL Server仓库 echo deb [archamd64 signed-by/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/22.04/prod jammy main | sudo tee /etc/apt/sources.list.d/mssql-release.list # 更新本地包索引使新添加的仓库生效 sudo apt update这里有个大坑仓库地址一定要对应你的系统版本。比如ubuntu/22.04对应Jammy Jellyfish。如果你用的是Ubuntu 20.04就需要把URL中的22.04换成20.04jammy换成focal。地址不对会导致apt update失败或安装时找不到包。3.2 安装SQL Server引擎仓库配置好后安装就相对简单了。# 安装SQL Server 2022当前最新的长期支持版本 sudo apt install -y mssql-server安装过程会自动下载大约800MB的包并完成依赖解析。安装完成后千万不要以为这就结束了。最关键的一步是运行配置脚本。3.3 运行配置脚本与设置SA密码安装程序只是把文件放到了系统里还没有初始化数据库实例和配置服务。# 运行MSSQL配置脚本 sudo /opt/mssql/bin/mssql-conf setup这个交互式脚本会引导你完成初始配置选择版本你会看到一系列版本选项从免费的Developer版、Express版到需要许可证的Standard版、Enterprise版。对于学习和测试直接选Developer版选项2它是功能完整的免费版本。生产环境请购买对应许可证并选择相应版本。接受许可条款输入YES。设置SA用户密码这是SQL Server最高权限的系统管理员账户密码。这里必须设置一个强密码满足复杂度要求至少8位包含大小写字母、数字和符号。我见过太多人设个123456然后服务器被黑。建议使用密码生成器生成并妥善保存。配置脚本运行成功后它会自动启动mssql-server服务并设置为开机自启。你可以用以下命令验证服务状态# 检查服务状态 systemctl status mssql-server --no-pager -l # 如果服务没有运行手动启动 sudo systemctl start mssql-server sudo systemctl enable mssql-server看到active (running)字样并且没有红色的错误日志说明SQL Server服务已经成功跑起来了。3.4 安装SQL Server命令行工具sqlcmd和bcp服务有了我们还需要一个客户端工具来连接和管理它。微软提供了mssql-tools包里面包含sqlcmd命令行查询工具和bcp大容量复制工具。# 添加包含命令行工具的仓库可能和主仓库不同 curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg echo deb [archamd64 signed-by/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/ubuntu/22.04/prod jammy main | sudo tee /etc/apt/sources.list.d/msprod.list sudo apt update # 安装工具包过程中会询问是否接受许可条款输入YES sudo apt install -y mssql-tools unixodbc-dev # 将工具路径添加到当前用户的PATH环境变量方便直接调用 echo export PATH$PATH:/opt/mssql-tools/bin ~/.bashrc source ~/.bashrc现在你可以用sqlcmd来连接本地的SQL Server实例了。4. 基础连接测试与防火墙配置服务跑起来工具也装好了是时候进行第一次“握手”了。4.1 使用sqlcmd进行本地连接测试最基本的测试是直接在服务器上连接自己。# 使用SA账户连接 sqlcmd -S localhost -U SA -P 你的强密码如果连接成功你会看到一个以1开头的命令行提示符。这时可以执行一个简单的查询来验证SELECT VERSION; GO输入GO并回车执行你会看到SQL Server的版本信息其中应该包含“Linux”字样证明你连接上的确实是刚刚安装的Linux版SQL Server。输入QUIT退出。第一个常见坑点如果连接时报错“Login failed for user SA”大概率是密码错误或者密码含有特殊字符在命令行中需要转义。一个更稳妥的测试方法是使用-P参数但不直接写密码让程序提示输入sqlcmd -S localhost -U SA然后根据提示输入密码可以避免转义问题。4.2 配置防火墙允许远程连接默认情况下SQL Server只监听本地回环地址(127.0.0.1)。为了让其他机器能够访问我们需要做两件事配置SQL Server监听所有IP以及在防火墙开放端口。1. 配置SQL Server网络# 使用mssql-conf工具设置SQL Server监听所有网络接口 sudo /opt/mssql/bin/mssql-conf set network.ipaddress 0.0.0.0 # 重启服务使配置生效 sudo systemctl restart mssql-server这个命令将tcpport配置为0.0.0.0,1433表示在所有网络接口的1433端口上监听。2. 配置防火墙以UFW为例# 启用防火墙如果之前关闭了 sudo ufw enable # 允许1433端口SQL Server默认端口的TCP入站流量 sudo ufw allow 1433/tcp # 查看规则是否生效 sudo ufw status numbered你应该能看到一条允许1433/tcp的规则。4.3 从远程客户端进行连接测试现在从你的开发机比如Windows电脑上使用SSMSSQL Server Management Studio或者任何支持SQL Server的客户端如Azure Data Studio进行连接。服务器名称填写你的Linux服务器的IP地址例如192.168.1.100身份验证选择“SQL Server身份验证”登录名SA密码你之前设置的强密码点击连接。如果一切顺利你就能成功连接到Linux上的SQL Server了。第二个常见坑点连接超时或失败。请按以下步骤排查检查服务状态在Linux服务器上再次运行systemctl status mssql-server确认服务是active (running)。检查监听端口在服务器上运行sudo netstat -tlnp | grep 1433应该能看到mssql-server进程正在监听0.0.0.0:1433或:::1433IPv6。如果只看到127.0.0.1:1433说明网络配置没生效。检查防火墙确认服务器防火墙1433端口已开放。也可以临时在服务器上关闭防火墙测试(sudo ufw disable)如果此时能连上就是防火墙问题。检查网络路由从客户端ping一下服务器IP确保网络是通的。有些云服务器如AWS EC2、阿里云ECS还需要在安全组规则中放行1433端口这个是在云平台控制台配置的和服务器本身的防火墙是两回事。5. 生产环境关键配置与优化基础安装和连通只是第一步。要让SQL Server在Linux上稳定、高效地服务于生产环境还需要进行一系列关键配置。5.1 调整SQL Server内存限制默认情况下SQL Server会尝试使用几乎所有可用内存。在独享的数据库服务器上这没问题但如果服务器上还跑着其他应用就需要限制一下。# 查看当前内存配置单位是MB sudo /opt/mssql/bin/mssql-conf list | grep memory # 设置SQL Server最大可用内存为8GB8192MB sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 8192 sudo systemctl restart mssql-server这个值需要根据你的物理内存总量来设定。一个经验法则是留给操作系统和其他进程至少2-4GB内存剩下的可以分配给SQL Server。5.2 配置数据文件和日志文件的存储路径默认的数据文件(/var/opt/mssql/data)可能位于系统盘。为了提高I/O性能和数据安全性强烈建议将数据文件和日志文件迁移到独立的、性能更好的存储设备上比如SSD阵列或高性能云盘。# 1. 创建新的数据目录例如挂载在 /data 下 sudo mkdir -p /data/mssql/{data,log,temp} # 2. 将目录所有权改为mssql用户 sudo chown -R mssql:mssql /data/mssql # 3. 停止SQL Server服务 sudo systemctl stop mssql-server # 4. 移动现有的系统数据库文件谨慎操作建议先备份 sudo mv /var/opt/mssql/data/master.mdf /data/mssql/data/ sudo mv /var/opt/mssql/data/mastlog.ldf /data/mssql/log/ sudo mv /var/opt/mssql/data/model.mdf /data/mssql/data/ sudo mv /var/opt/mssql/data/modellog.ldf /data/mssql/log/ sudo mv /var/opt/mssql/data/msdbdata.mdf /data/mssql/data/ sudo mv /var/opt/mssql/data/msdblog.ldf /data/mssql/log/ sudo mv /var/opt/mssql/data/tempdb.mdf /data/mssql/temp/ sudo mv /var/opt/mssql/data/templog.ldf /data/mssql/temp/ # 5. 修改SQL Server配置指向新路径 sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /data/mssql/data sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /data/mssql/log sudo /opt/mssql/bin/mssql-conf set filelocation.defaulttempdir /data/mssql/temp sudo /opt/mssql/bin/mssql-conf set filelocation.errorlogfile /data/mssql/log/errorlog # 6. 启动服务 sudo systemctl start mssql-server重要警告移动系统数据库文件是高风险操作。务必在操作前对/var/opt/mssql/data目录进行完整备份。如果启动失败检查/var/opt/mssql/log/errorlog中的错误信息很可能是因为文件权限不对。5.3 启用并配置SQL Server代理SQL Server代理用于执行计划任务作业比如定时备份、数据清理等。默认是禁用的。# 启用SQL Server代理 sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-server启用后你可以通过sqlcmd或图形化工具创建和管理作业。对于生产环境的自动化运维这是必不可少的功能。5.4 配置备份与恢复策略数据库安装完第一时间就要想好备份。这里给出一个基础的备份脚本示例你可以通过SQL Server代理定期执行。 首先创建一个备份目录并设置权限sudo mkdir -p /backup/mssql sudo chown -R mssql:mssql /backup/mssql然后通过sqlcmd连接数据库执行以下T-SQL命令创建一个简单的全量备份作业这里只是一个示例实际应根据数据量设计完整策略USE master; GO -- 创建一个存储过程来执行备份 CREATE PROCEDURE sp_BackupAllDatabases AS BEGIN DECLARE dbName NVARCHAR(128); DECLARE backupPath NVARCHAR(500); DECLARE fileName NVARCHAR(500); DECLARE dateTime NVARCHAR(20); SET dateTime REPLACE(CONVERT(NVARCHAR, GETDATE(), 120), :, -); SET backupPath N/backup/mssql/; DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE name NOT IN (master, model, msdb, tempdb) AND state 0; -- 只备份在线用户数据库 OPEN db_cursor; FETCH NEXT FROM db_cursor INTO dbName; WHILE FETCH_STATUS 0 BEGIN SET fileName backupPath dbName _ dateTime .bak; BACKUP DATABASE dbName TO DISK fileName WITH COMPRESSION, INIT, STATS10; FETCH NEXT FROM db_cursor INTO dbName; END; CLOSE db_cursor; DEALLOCATE db_cursor; END; GO你可以通过SQL Server代理每天凌晨调用这个存储过程。记住备份文件也要定期清理或转移到异地防止磁盘被撑满。6. 高级主题使用Docker部署SQL Server除了直接在宿主机安装使用Docker容器化部署是另一种越来越流行的方式特别适合开发、测试环境以及追求快速部署和一致性的场景。结合热词中频繁出现的docker这里也补充一下。6.1 Docker环境准备首先确保你的Linux服务器已经安装了Docker Engine和Docker Compose。# 安装Docker以Ubuntu为例 sudo apt install -y docker.io sudo systemctl start docker sudo systemctl enable docker # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose6.2 使用Docker运行SQL Server微软提供了官方的SQL Server Docker镜像。运行起来非常简单# 拉取最新的SQL Server 2022镜像 sudo docker pull mcr.microsoft.com/mssql/server:2022-latest # 运行容器 sudo docker run -e ACCEPT_EULAY -e MSSQL_SA_PASSWORD你的强密码 \ -p 1433:1433 --name sql1 --hostname sql1 \ -v /your/local/data:/var/opt/mssql/data \ -v /your/local/log:/var/opt/mssql/log \ -v /your/local/secrets:/var/opt/mssql/secrets \ -d \ mcr.microsoft.com/mssql/server:2022-latest参数解释-e ACCEPT_EULAY接受最终用户许可协议。-e MSSQL_SA_PASSWORD设置SA密码必须是强密码。-p 1433:1433将宿主机的1433端口映射到容器的1433端口。--name sql1给容器起个名字。-v ...将宿主机的目录挂载到容器内用于持久化数据、日志和密钥。这是关键否则容器删除后数据就没了。-d后台运行。6.3 Docker部署的优缺点与注意事项优点极速部署一条命令就能拉起一个全新的SQL Server实例环境完全隔离。环境一致开发、测试、生产环境使用相同的镜像避免“在我机器上是好的”问题。资源隔离可以方便地限制容器的CPU和内存使用。易于清理测试完直接删除容器宿主机系统保持干净。缺点与坑点I/O性能虽然Docker的I/O开销已经很小但对于极端高性能、低延迟的OLTP场景物理机或虚拟机部署可能仍有微弱优势。存储配置挂载卷-v的权限问题很常见。确保宿主机挂载目录如/your/local/data对容器内的mssql用户UID10001可读写。通常需要sudo chown -R 10001:0 /your/local/data。网络配置容器内的SQL Server默认监听所有接口。如果要从宿主机外部连接确保宿主机的防火墙和云安全组放行了映射的端口如1433。备份恢复备份文件位于挂载卷中管理方式和物理部署类似。但要注意容器的时间可能与宿主机不同可能影响备份文件名中的时间戳。对于大多数中小型应用和开发测试环境Docker部署的便利性远大于其微小的性能损失是我个人非常推荐的方式。7. 安装后检查清单与性能基准测试安装配置完成后不要急着上线业务。先做一个全面的健康检查和简单的性能测试。7.1 系统与数据库健康检查清单通过一系列命令快速确认环境是否正常。系统层面# 1. 检查服务状态 systemctl status mssql-server # 2. 检查端口监听 sudo netstat -tlnp | grep 1433 # 3. 检查错误日志尾部是否有严重错误 sudo tail -50 /var/opt/mssql/log/errorlog # 4. 检查磁盘空间确保数据盘有足够空间 df -h /data/mssql # 或你的数据目录 # 5. 检查内存使用情况 free -h数据库层面通过sqlcmd连接后执行-- 1. 查看数据库状态 SELECT name, state_desc, recovery_model_desc FROM sys.databases; -- 2. 查看连接数 SELECT COUNT(*) as CurrentConnections FROM sys.dm_exec_connections; -- 3. 查看关键配置 SELECT name, value, value_in_use FROM sys.configurations WHERE name IN (max server memory (MB), min server memory (MB), max degree of parallelism, cost threshold for parallelism);7.2 简单性能基准测试运行一个简单的压力测试感受一下数据库的响应能力。你可以使用开源工具HammerDB或者自己写一个简单的脚本。这里给出一个用sqlcmd进行简单查询压测的例子模拟并发 创建一个测试脚本stress_test.sqlUSE master; GO -- 创建一个简单的测试表 IF NOT EXISTS (SELECT * FROM sys.databases WHERE name StressTestDB) CREATE DATABASE StressTestDB; GO USE StressTestDB; GO IF OBJECT_ID(TestTable, U) IS NOT NULL DROP TABLE TestTable; CREATE TABLE TestTable (ID INT IDENTITY PRIMARY KEY, RandomData NVARCHAR(255), CreatedDate DATETIME DEFAULT GETDATE()); GO -- 插入一些测试数据 DECLARE i INT 0; WHILE i 10000 BEGIN INSERT INTO TestTable (RandomData) VALUES (NEWID()); SET i i 1; END; GO然后写一个简单的Bash脚本run_stress.sh模拟多个并发查询#!/bin/bash for i in {1..50} # 模拟50个并发 do sqlcmd -S localhost -U SA -P 你的密码 -d StressTestDB -Q SELECT COUNT(*) FROM TestTable WHERE ID % 2 0; done wait echo “Stress test completed.”运行这个脚本同时用top或htop命令观察服务器的CPU和内存使用情况。正常情况下CPU使用率会上升但系统不应该卡死所有查询都应该能成功返回。这个测试可以暴露出一些配置问题比如内存不足、TempDB配置不当等。8. 故障排查与日常维护指南即使安装顺利在长期运行中也可能遇到问题。这里整理了一些常见问题的排查思路和日常维护命令。8.1 连接与登录问题错误A network-related or instance-specific error...(错误号-1, 2, 5, 53, 121)排查检查服务状态systemctl status mssql-server。检查端口监听sudo netstat -tlnp | grep 1433。如果没监听检查/var/opt/mssql/mssql.conf中network.ipaddress配置。检查防火墙sudo ufw status。检查云服务商安全组。从客户端telnet 服务器IP 1433看端口是否通。解决根据排查结果启动服务、修改监听配置、开放防火墙/安全组规则。错误Login failed for user SA.(错误号18456)排查密码错误、账户被锁定、SQL Server身份验证模式未启用默认已启用。解决确认密码正确注意大小写和特殊字符。检查错误日志sudo tail -100 /var/opt/mssql/log/errorlog会有更详细的失败原因状态码。状态码5表示密码错误8表示密码过期但可更改等等。如果账户被锁定需要用其他有权限的账户登录后重置或者重启服务临时。8.2 性能问题现象查询突然变慢排查检查当前活动会话和阻塞EXEC sp_who2;或SELECT * FROM sys.dm_exec_requests WHERE blocking_session_id 0;检查等待统计信息SELECT * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC;关注PAGEIOLATCH_*磁盘I/O等待、LCK_*锁等待。检查内存压力SELECT * FROM sys.dm_os_performance_counters WHERE counter_name LIKE %Page Life Expectancy% OR counter_name LIKE %Buffer Cache Hit Ratio%;PLE值过低如300秒说明内存不足。解决根据等待类型分析。如果是I/O问题考虑升级磁盘或优化查询、索引。如果是内存问题增加物理内存或调整max server memory。如果是锁阻塞优化事务和查询逻辑。现象磁盘空间不足排查df -h查看磁盘使用率。在数据库内EXEC sp_spaceused;查看各数据库空间使用。解决清理日志文件BACKUP LOG ...或DBCC SHRINKFILE、归档历史数据、扩展磁盘。8.3 日常维护命令备份所有用户数据库如前文所述通过作业定期执行。查看错误日志sudo tail -f /var/opt/mssql/log/errorlog实时跟踪。重启服务sudo systemctl restart mssql-server。重大配置更改后需要重启。升级SQL Server通过包管理器进行小版本升级。sudo apt update sudo apt install mssql-server sudo systemctl restart mssql-server大版本升级如2019到2022需要更谨慎的计划通常涉及新的仓库和安装命令。8.4 一个真实的排错案例virtualization support not detected与 Docker在热词中看到了virtualization support not detected docker desktop failed to start。虽然Docker Desktop主要用在Windows/Mac但这个问题在Linux虚拟机VM中运行Docker时也可能遇到。根本原因是宿主机的BIOS/UEFI中虚拟化技术如Intel VT-x/AMD-V没有开启或者被Hypervisor如VMware、Hyper-V独占。在Linux虚拟机中运行Docker的SQL Server镜像如果遇到性能极差或容器启动失败可以检查在VMware中确保虚拟机设置里勾选了“虚拟化Intel VT-x/EPT或AMD-V/RVI”。在物理机BIOS中确保CPU的虚拟化支持已开启。在Linux宿主机内运行grep -E --color (vmx|svm) /proc/cpuinfo如果有输出说明CPU支持虚拟化且已在BIOS开启。如果没输出就需要去BIOS设置。对于KVM环境Docker需要运行在--privileged模式或配置正确的设备映射才能获得接近原生的性能。Linux上安装和配置SQL Server从系统调优到安装配置再到生产环境加固和排错是一个系统工程。它要求我们不仅懂数据库还要懂操作系统、网络和存储。这篇文章几乎覆盖了一个DBA或运维工程师在初次部署时会遇到的所有关键点和坑。记住稳扎稳打做好每一步前置检查比出了问题再回头排查要高效十倍。尤其是在修改配置文件和移动数据文件时备份是你的救命稻草。现在你的Linux服务器已经拥有了一个强大且稳定的SQL Server实例可以放心地去承载你的业务数据了。如果在后续使用中遇到新的问题多查官方文档多看错误日志社区的智慧总能帮你找到答案。