首先确认SQL Server服务是否正在运行,使用以下命令查看服务状态:
sudo systemctl status mssql-server
若服务未启动,执行以下命令启动服务:
sudo systemctl start mssql-server
若服务启动失败,需结合日志进一步排查(参考步骤2)。
日志是定位故障的根本依据,SQL Server的错误日志默认位于/var/log/mssql/errorlog
。使用以下命令查看日志末尾的最新内容:
tail -n 50 /var/log/mssql/errorlog
此外,通过journalctl
命令查看系统日志,获取服务启动过程的详细信息:
journalctl -u mssql-server -b
(-b
表示当前启动周期)。
使用ping
命令测试客户端与SQL Server服务器之间的网络连接:
ping <服务器IP>
若无法ping通,需检查网络配置(如IP地址、子网掩码、网关)或防火墙设置。
SQL Server默认使用1433端口,通过telnet
或nc
命令测试端口是否开放:
telnet <服务器IP> 1433
或 nc -zv <服务器IP> 1433
若端口未开放,需检查防火墙规则(参考步骤4)。
CentOS的firewalld
防火墙可能阻止外部访问SQL Server端口。执行以下命令开放1433端口:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent # 永久添加规则
sudo firewall-cmd --reload # 重新加载防火墙配置
若使用iptables
,需添加对应规则并保存。
SQL Server的主配置文件mssql.conf
(通常位于/etc/mssql/
)中的参数设置直接影响服务运行。重点检查以下参数:
listen_addresses
:需设置为0.0.0.0
以允许所有网络接口访问(默认可能为localhost
);port
:确认端口与防火墙开放的端口一致(默认1433)。sudo systemctl restart mssql-server
。SQL Server相关目录(如/var/opt/mssql/
)的权限错误会导致服务无法启动或访问失败。执行以下命令修复权限:
sudo chown -R mssql:mssql /var/opt/mssql/
若存在security.hiv
文件(如域环境),需确保其权限为600
,所有者为mssql
:
sudo chmod 600 /var/opt/mssql/security.hiv
sudo chown mssql:mssql /var/opt/mssql/security.hiv
。
确保客户端已安装msodbcsql
(ODBC驱动)和sqlcmd
(命令行工具),安装命令如下:
sudo yum install -y mssql-tools unixODBC-devel
添加工具路径到环境变量:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
source ~/.bash_profile
确认连接字符串中的参数(服务器地址、端口、数据库名称、用户名、密码)正确。例如:
sqlcmd -S tcp:<服务器IP>,1433 -U SA -P <密码> -d <数据库名>
若使用Windows身份验证,需确保SQL Server配置为允许混合模式认证(参考SQL Server配置)。
系统资源不足(如CPU、内存、磁盘空间)可能导致SQL Server性能下降或崩溃。使用以下命令监控资源:
top
或 htop
;df -h
(查看根分区及/var/opt/mssql/
目录的使用情况);iostat -x 1
(需安装sysstat
包)。max server memory
)。若日志显示数据库文件损坏(如CHECKDB
错误),需进入单用户模式修复:
sudo systemctl stop mssql-server
;sudo /opt/mssql/bin/sqlservr -m
;sqlcmd
执行修复命令(注意:REPAIR_ALLOW_DATA_LOSS
可能丢失数据,需提前备份):sqlcmd -S localhost -U SA -Q "DBCC CHECKDB ('数据库名称') WITH REPAIR_ALLOW_DATA_LOSS"
sudo systemctl start mssql-server
。若系统启用了SELinux(getenforce
返回Enforcing
),可能限制SQL Server的网络访问。临时设置为宽容模式(测试用):
sudo setenforce 0
若问题解决,需修改SELinux策略(如添加mssql_port_t
端口上下文)或永久禁用SELinux(不推荐生产环境):
sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
。