您看到的错误信息:
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 中创建用户,通常分为两个步骤:
- 创建登录名(Login):用于连接到 SQL Server 实例(服务器级别)
- 创建数据库用户(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