Centos-mssql-server安装

您看到的错误信息:

复制代码
Errors during downloading metadata for repository 'docker-ce-stable':
  - Curl error (35): SSL connect error for https://download.docker.com/...
Error: Failed to download metadata for repo 'docker-ce-stable': ...

这仅表示 Docker 的软件源无法访问(由于 SSL 问题),但它不会影响您安装 mssql-server

只要 mssql-server 及其依赖可以从 Microsoft 的源正常下载,安装就可以继续。


✅ 关键:检查 mssql-server 是否真的无法安装

请仔细观察 yum 的输出,看是否 最终提示 mssql-server 安装失败 ,还是仅仅 警告 Docker 源不可用

理想情况下,您应该会看到类似:

复制代码
Dependencies resolved.
Package                      Arch           Version               Repository        Size
Installing:
mssql-server                 x86_64         15.0.4198.2-1         packages-microsoft-com-mssql-server-2019  2.0 G
...
Transaction Summary
Install  1 Package
...
Complete!

✅ 即使上面有 Docker 的错误,只要最后 mssql-server 被成功安装,就没问题。


🔍 如果 mssql-server 真的卡住或失败,请按以下步骤解决

✅ 步骤 1:临时禁用 Docker 仓库(避免干扰)
bash 复制代码
sudo yum-config-manager --disable docker-ce-stable

或者直接删除 repo 文件:

bash 复制代码
sudo rm /etc/yum.repos.d/docker-ce.repo
✅ 步骤 2:清理缓存并重试安装
bash 复制代码
sudo yum clean all
sudo yum makecache
sudo yum install -y mssql-server
✅ 步骤 3:如果缺少依赖,安装 EPEL

某些 SQL Server 依赖(如 libsss_idmap)在 EPEL 中:

bash 复制代码
# 下载 EPEL 仓库(使用 vault 镜像)
sudo curl -o /etc/yum.repos.d/epel.repo http://vault.fedoraproject.org/pub/archive/epel/8/Everything/x86_64/epel-bootstrap.repo

# 安装 EPEL release 包
sudo yum install -y epel-release

# 再次尝试安装 SQL Server
sudo yum install -y mssql-server

✅ 步骤 4:配置并启动 SQL Server

一旦 mssql-server 安装成功:

bash 复制代码
# 配置实例(设置 SA 密码)
sudo /opt/mssql/bin/mssql-conf setup

选择:

  • 2 → SQL Server Developer (免费,适用于开发和测试)
  • 输入强密码,例如:MySaPassw0rd!2025
bash 复制代码
# 启动服务
sudo systemctl start mssql-server
sudo systemctl enable mssql-server

# 检查状态
systemctl status mssql-server --no-pager

✅ 步骤 5:(可选)安装命令行工具 sqlcmd

bash 复制代码
# 添加 Microsoft 产品源
curl https://packages.microsoft.com/config/rhel/8/prod.repo | sudo tee /etc/yum.repos.d/msprod.repo

# 安装工具
sudo yum install -y mssql-tools unixODBC-devel

# 添加到环境变量
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

# 测试连接
sqlcmd -S localhost -U SA -P 'MySaPassw0rd!2025' -Q "SELECT @@VERSION"

📌 重要提醒

项目 说明
⚠️ Docker 源错误 仅影响 Docker 安装,不影响 SQL Server
✅ SQL Server 源 packages.microsoft.com 通常是可用的
✅ 推荐操作 禁用或删除 Docker repo,避免干扰
🔄 系统状态 CentOS Stream 8 已 EOL,建议尽快迁移

您看到的错误:

复制代码
cat: /var/opt/mssql/log/errorlog: No such file or directory

这说明 SQL Server 服务从未成功启动过,因此没有生成日志文件。


✅ 诊断结论

由于 /var/opt/mssql/log/errorlog 不存在,说明:

  • SQL Server 进程(sqlservr)在启动的最早阶段就失败了
  • 可能原因:权限问题、内存不足、未运行 setup、目录不存在

✅ 解决方案:逐步排查

🔧 步骤 1:确保目录存在并设置正确权限

bash 复制代码
# 创建必要目录
sudo mkdir -p /var/opt/mssql

# 设置正确所有者(mssql 用户和组)
sudo chown -R mssql:mssql /var/opt/mssql

# 设置权限
sudo chmod -R 755 /var/opt/mssql

🔧 步骤 2:检查系统内存(SQL Server 至少需要 2GB)

bash 复制代码
free -h
如果输出类似:
复制代码
              total        used        free
Mem:           1.8G        1.2G        600M

→ ❌ 内存不足!SQL Server 无法启动。

✅ 解决方案:
  • 升级服务器内存到 至少 2GB
  • 或改用 Docker 方式运行 SQL Server(更灵活)

🔧 步骤 3:确认是否已运行 mssql-conf setup

bash 复制代码
sudo /opt/mssql/bin/mssql-conf setup
  • 选择:2(Developer 版)
  • 设置 SA 密码,例如:MySaPassw0rd!2025

⚠️ 即使之前运行过,也请再运行一次,确保配置写入。


🔧 步骤 4:重置服务状态并启动

bash 复制代码
# 重置 systemd 失败状态
sudo systemctl reset-failed mssql-server

# 启动服务
sudo systemctl start mssql-server

# 查看状态
systemctl status mssql-server --no-pager

🔧 步骤 5:再次检查日志是否存在

bash 复制代码
# 现在应该能生成日志了
sudo ls -l /var/opt/mssql/log/
sudo cat /var/opt/mssql/log/errorlog | grep -i "error\|fatal"

✅ 如果仍然失败:手动运行 SQL Server 进程(调试模式)

bash 复制代码
# 切换到 mssql 用户并手动启动
sudo -u mssql /opt/mssql/bin/sqlservr

⚠️ 这会直接在终端输出错误信息,不会后台运行。

观察输出:

  • 是否提示 Permission denied
  • 是否提示 Insufficient memory
  • 是否提示 Could not create directory

请将输出贴出,我将帮您精准定位。


✅ 建议:改用 Docker(推荐)

鉴于 CentOS Stream 8 已 EOL,直接安装 SQL Server 容易出问题。Docker 是更稳定的选择

bash 复制代码
# 1. 手动下载 RPM 并安装 Docker(见之前指导)
# 2. 运行 SQL Server 容器
sudo docker run -d \
  --name sqlserver \
  -e 'ACCEPT_EULA=Y' \
  -e 'SA_PASSWORD=MySaPassw0rd!2025' \
  -p 1433:1433 \
  -v /opt/mssql:/var/opt/mssql \
  mcr.microsoft.com/mssql/server:2019-latest

✅ 下一步

请运行以下命令并贴出结果:

bash 复制代码
# 1. 内存情况
free -h

# 2. 目录是否存在
ls -ld /var/opt/mssql

# 3. 尝试运行 setup
sudo /opt/mssql/bin/mssql-conf setup

在 SQL Server 中创建用户,通常分为两个步骤:

  1. 创建登录名(Login):用于连接到 SQL Server 实例(服务器级别)
  2. 创建数据库用户(User):将登录名映射到某个具体数据库,用于访问数据库对象

✅ 一、使用 sqlcmd 或 SSMS 创建用户(以命令行为例)

1. 连接到 SQL Server

bash 复制代码
sqlcmd -S localhost -U SA -P 'YourStrong!Passw0rd'

进入后,输入以下命令,每条命令后以 GO 结束。


2. 创建登录名(Login)

sql 复制代码
-- 创建一个名为 'appuser' 的登录名,密码为 'MyPassw0rd!2025'
CREATE LOGIN appuser 
WITH PASSWORD = 'MyPassw0rd!2025';
GO

🔐 密码必须符合复杂性要求:大写、小写、数字、特殊字符,至少 8 位。


3. 在指定数据库中创建用户并关联登录名

sql 复制代码
-- 切换到目标数据库
USE MyCompanyDB;
GO

-- 创建数据库用户 'appuser',关联到登录名 'appuser'
CREATE USER appuser FOR LOGIN appuser;
GO

4. 授予权限(常见角色)

✅ 授予读写权限(db_datareader + db_datawriter
sql 复制代码
ALTER ROLE db_datareader ADD MEMBER appuser;
GO
ALTER ROLE db_datawriter ADD MEMBER appuser;
GO
✅ 授予数据库所有者权限(慎用)
sql 复制代码
ALTER ROLE db_owner ADD MEMBER appuser;
GO
✅ 只读权限
sql 复制代码
ALTER ROLE db_datareader ADD MEMBER appuser;
GO

✅ 二、验证用户是否创建成功

sql 复制代码
-- 查看所有登录名(服务器级别)
SELECT name, type_desc, create_date FROM sys.server_principals WHERE type IN ('S', 'U', 'G');
GO

-- 查看当前数据库中的用户
USE MyCompanyDB;
GO
SELECT name, type_desc FROM sys.database_principals WHERE type IN ('S', 'U', 'G');
GO

✅ 三、测试新用户连接

bash 复制代码
sqlcmd -S localhost -U appuser -P 'MyPassw0rd!2025' -Q "SELECT USER_NAME();"

输出应为:

复制代码
appuser

✅ 四、删除用户(如需)

sql 复制代码
-- 1. 删除数据库用户
USE MyCompanyDB;
GO
DROP USER appuser;
GO

-- 2. 删除登录名
USE master;
GO
DROP LOGIN appuser;
GO

🔐 安全建议

建议 说明
❌ 不要使用 SA 账号连接应用 应用应使用专用账号
✅ 最小权限原则 只授予必要权限(如只读)
✅ 定期更换密码 特别是生产环境
✅ 使用强密码 避免简单密码

📌 示例:创建一个只读用户

sql 复制代码
-- 创建登录
CREATE LOGIN readonly_user WITH PASSWORD = 'ReadPass!2025';
GO

-- 切换数据库
USE MyCompanyDB;
GO

-- 创建用户
CREATE USER readonly_user FOR LOGIN readonly_user;
GO

-- 授予只读权限
ALTER ROLE db_datareader ADD MEMBER readonly_user;
GO

相关推荐
bantinghy1 小时前
Linux系统TCP/IP网络参数优化
linux·网络·tcp/ip
星期天要睡觉1 小时前
Linux 综合练习
linux·运维·服务器
saynaihe2 小时前
proxmox8升级到proxmox9
linux·运维·服务器
Orchestrator_me2 小时前
CentOS交换区处理
linux·运维·centos
zru_96022 小时前
centos 系统如何安装open jdk 8
java·linux·centos
FLS1682 小时前
VMwaer虚拟机安装完Centos后无法联网问题
linux·运维·centos
OctopusMonster2 小时前
centos下gdb调试python的core文件
linux·运维·centos
snowfoootball3 小时前
(自用)Linux 常用命令自查文档
linux·运维·服务器
R-G-B3 小时前
Linux常见命令总结 合集二:基本命令、目录操作命令、文件操作命令、压缩文件操作、查找命令、权限命令、其他命令
linux·基本命令·目录操作命令·linux常见命令·压缩文件操作·权限命令·查找命令
Chukai1233 小时前
Windows 和 Linux 系统下修改防火墙机制开放端口
linux·运维·windows