Ubuntu上SQL Server的常见问题及解决方案
Ubuntu上SQL Server常见问题及解决方案
1. 依赖库缺失(安装/运行时报错)
安装SQL Server时,常因缺少libldap-2.4-2
(LDAP库)、libssl1.1
(SSL加密库)等依赖库导致失败,报错示例如error while loading shared libraries: liblber-2.4.so.2
。
解决方法:手动下载对应版本的依赖包并安装。例如,libldap-2.4-2
可从Deepin社区仓库下载(libldap-2.4-2_2.4.47+dfsg.4-1+eagle_amd64.deb
),libssl1.1
可从Ubuntu安全仓库下载(libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64.deb
),使用dpkg -i
命令安装后重新运行sudo apt-get install -y mssql-server
。
2. SSL/TLS连接问题(远程连接失败或加密错误)
SQL Server 2022在Ubuntu上默认使用TLS 1.3,但部分客户端或网络环境不支持,导致连接超时或加密失败;也可能因证书信任问题无法建立安全连接。
解决方法:
- 降级TLS版本:编辑
/etc/ssl/openssl.cnf
文件,在[system_default_sect]
部分添加MinProtocol = TLSv1.2
,限制使用TLS 1.2。 - 信任服务器证书:连接时添加
trustServerCertificate=true
参数(如sqlcmd -S server_ip -U sa -P password -Q "SELECT 1" -o output.txt -l 30 -t 10 -N -C -r 1 -b -a 32767 -e -I -H server_ip -k
),避免客户端验证服务器证书。
3. 数据库文件系统路径错误(启动失败)
若数据库系统文件(如主数据文件、日志文件)配置在非默认路径(如/home
目录),可能导致SQL Server无法启动,报错示例如Failed to start Microsoft SQL Server Database Engine
。
解决方法:进入单用户模式(sudo /opt/mssql/bin/sqlservr --single-user
),使用ALTER DATABASE
命令修改系统数据库文件路径至/var/opt/mssql/data
(默认路径)。例如:
ALTER DATABASE master MODIFY FILE (NAME = master, FILENAME = '/var/opt/mssql/data/master.mdf');
ALTER DATABASE master MODIFY FILE (NAME = mastlog, FILENAME = '/var/opt/mssql/data/mastlog.ldf');
修改后重启服务:sudo systemctl restart mssql-server
。
4. 网络连接问题(远程无法访问)
远程计算机无法连接到SQL Server,常见原因包括:SQL Server未启用远程连接、防火墙未开放1433端口、IPv6禁用导致名称解析失败。
解决方法:
- 启用远程连接:使用
sqlcmd
登录SQL Server,执行EXEC sp_configure 'remote access', 1; RECONFIGURE;
开启远程访问。 - 开放防火墙端口:若使用
ufw
防火墙,运行sudo ufw allow 1433/tcp
开放端口。 - 启用IPv6或使用IP地址:若服务器禁用了IPv6(
cat /proc/cmdline
包含ipv6.disable=1
),需修改内核参数(编辑/etc/default/grub
,删除ipv6.disable=1
并更新GRUB),或连接时使用服务器IP地址替代主机名。
5. 性能瓶颈(高CPU/内存/磁盘I/O)
SQL Server在Ubuntu上运行缓慢,常见原因包括:内存不足(默认分配不足)、磁盘I/O瓶颈(未使用SSD)、查询未优化(全表扫描)、NUMA亲和性未设置。
解决方法:
- 调整内存分配:编辑
/etc/sqlserver.conf
(或使用mssql-conf
命令),设置memory.memorylimitmb
参数(建议分配70%-80%的物理内存,最低3.25GB)。 - 优化磁盘I/O:将数据库文件(
.mdf
)、日志文件(.ldf
)放在SSD上;调整vm.swappiness
值(sudo sysctl vm.swappiness=10
)减少交换分区使用。 - 查询优化:使用
SET SHOWPLAN_ALL ON
查看查询执行计划,为频繁查询的列创建索引(如CREATE INDEX idx_column ON table_name(column_name)
);定期更新统计信息(UPDATE STATISTICS table_name
)。 - 设置NUMA亲和性:通过
mssql-conf
命令设置cpu.cpuaffinity
参数,将SQL Server进程绑定到特定CPU核心,提升多核性能。
6. 日志分析与故障排查
当SQL Server出现问题时,错误日志是定位问题的关键,但新手常不知如何查看或分析日志。
解决方法:
- 查看错误日志:SQL Server错误日志默认位于
/var/opt/mssql/log/errorlog
,使用tail -f /var/opt/mssql/log/errorlog
实时查看最新日志,或cat /var/opt/mssql/log/errorlog | grep -i error
过滤错误信息。 - 使用内置工具:通过
sqlcmd
执行xp_readerrorlog
存储过程读取日志(如EXEC xp_readerrorlog 0, 1, N'error'
),或使用SQL Server Management Studio(SSMS)的“管理”→“SQL Server日志”功能查看图形化日志。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu上SQL Server的常见问题及解决方案
本文地址: https://pptw.com/jishu/728010.html