Debian连接SQL Server的排查与修复指南
一 快速自检清单
- 确认服务已启动并开机自启:sudo systemctl status mssql-server;如未运行执行:sudo systemctl start mssql-server && sudo systemctl enable mssql-server。
- 本机连通性测试:sqlcmd -S localhost -U SA -P ‘YourPassword’;若本机不通,优先检查服务与认证。
- 远程连通性测试:在客户端执行 nc -vz <服务器IP> 1433 或 telnet <服务器IP> 1433;不通则多为网络/防火墙/监听问题。
- 监听与端口:确认 SQL Server 正在监听 1433/TCP,必要时用 sudo ss -lntp | grep 1433 或 netstat -an | grep 1433 检查。
- 日志定位:查看错误日志 tail -f /var/opt/mssql/log/errorlog,可快速发现认证失败、端口占用、配置错误等根因。
二 常见故障与修复
- 服务未运行或异常退出:查看状态与日志(systemctl status mssql-server、/var/opt/mssql/log/errorlog),修复配置或依赖后重启:sudo systemctl restart mssql-server。
- 防火墙阻断:开放 1433/TCP。UFW:sudo ufw allow 1433/tcp;firewalld:sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent && sudo firewall-cmd --reload。
- 未启用远程连接或监听错误:启用 TCP/IP 并监听 1433。推荐方式:sudo mssql-conf set network.tcpip_enabled true;sudo mssql-conf set network.tcp_port 1433;sudo systemctl restart mssql-server。
- 身份验证失败:确保为 SA 设置了强密码,且连接时用户名/密码正确;必要时在 mssql-conf 中确认使用 SQL 身份验证模式。
- 驱动/依赖问题(应用侧):确认驱动(如 sqlsrv.so/ODBC)路径正确,使用 ldd sqlsrv.so 检查依赖是否缺失并补齐库文件。
- 连接字符串错误:核对服务器地址、端口、数据库名、加密/信任参数等关键字拼写与取值。
三 网络与防火墙配置
- 开放端口:
- UFW:sudo ufw allow 1433/tcp
- firewalld:sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent && sudo firewall-cmd --reload
- 监听地址与端口:确保 SQL Server 监听 0.0.0.0:1433(而非仅 127.0.0.1)。通过 mssql-conf 设置 network.tcpip_enabled 与 network.tcp_port 后重启服务。
- 实例名访问与 Browser:若需通过“主机名\实例名”访问命名实例,需启用并放行 SQL Server Browser 的 1434/UDP。
- 云环境安全组:在 云厂商控制台 放行入站 1433/TCP(以及 1434/UDP 若使用命名实例)。
四 连接测试与验证
- 本机测试:sqlcmd -S 127.0.0.1 -U SA -P ‘YourPassword’;成功说明服务与本地认证正常。
- 远程测试:在客户端执行 sqlcmd -S <服务器IP> -U SA -P ‘YourPassword’;若失败,回到第二节逐项排查。
- 端口连通:nc -vz <服务器IP> 1433 或 telnet <服务器IP> 1433;不通则检查网络路径、ACL、云安全组与服务器防火墙。
- 日志复核:持续 tail -f /var/opt/mssql/log/errorlog,结合错误时间点定位问题。
五 应用侧连接与驱动建议
- 驱动与工具:安装 Microsoft ODBC 与命令行工具(mssql-tools):sudo apt install -y msodbcsql17 mssql-tools;连接示例:sqlcmd -S -U SA -P ‘YourPassword’ -d master。
- 连接字符串要点:
- 主机与端口:Server=tcp:,1433;
- 认证:UID/PWD;如需加密可添加 Encrypt=true;自签名证书可加 TrustServerCertificate=true(仅测试环境)。
- 常见报错速查:
- “Login failed for user ‘SA’”:检查密码、是否允许 SQL 身份验证、账户是否被锁定;
- “Named Pipes Provider, error: 40”:多为端口/监听未就绪或防火墙阻断;
- “SSL Provider: The certificate chain was issued by an authority that is not trusted”:生产环境请部署受信任证书,测试环境可临时使用 TrustServerCertificate。