• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

tintin7790

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Apple Silicon Mac 上使用 Docker 部署 SQL Server 2022,并通过 DBeaver 完成课程数据库作业环境配置

Apple Silicon Mac 上使用 Docker 部署 SQL Server 2022,并通过 DBeaver 完成课程数据库作业环境配置 https://img2024.cnblogs.com/blog/3782146/202610/3782146-20261016184255971-826189897.png https://img2024.cnblogs.com/blog/3782146/202610/3782146-20261016185018785-743409496.png

Mac 上的 SQL Server 实验截图

在 Apple Silicon Mac 上使用 Docker 部署 SQL Server 2022,并通过 DBeaver 完成课程数据库实验

实践环境:Apple M5 / macOS / Docker Desktop / SQL Server 2022 Developer Edition / DBeaver Community 26.2.2
配置时间:2026 年 10 月 16 日
配置目标:在没有 Windows 机房环境的情况下,使用 Mac 运行 Microsoft SQL Server,并恢复课程提供的 study.bak 数据库。

1. 背景与技术选型

学校机房使用 Windows 和 SQL Server 2012 + SQL Server Management Studio(SSMS)。课程实验要求使用 Study 数据库,其中包括学生表 S、课程表 C 和作业成绩表 Homework。

我的电脑使用 Apple Silicon(M5)芯片,CPU 架构为 ARM64;Microsoft SQL Server 官方 Linux 容器镜像使用 AMD64/x86-64 架构,因此不能像普通 ARM64 原生容器那样直接运行。本文采用 Docker 的 linux/amd64 平台模拟运行 SQL Server 2022,再用 macOS 原生的 DBeaver 作为数据库客户端。

至少对于当前的第一次作业,我的电脑没有任何卡顿,都还挺流畅的吧,接下来进行配置步骤,记得先下载好学习通里面的study.rar

2. 各组件

组件 角色 本次用途
Docker Desktop 容器运行与管理平台 运行 SQL Server 容器
SQL Server 2022 数据库管理系统(DBMS) 保存数据、解析和执行 T-SQL
DBeaver Community 数据库客户端(GUI) 编写 SQL、管理数据库、查看查询结果
Microsoft JDBC Driver 数据库连接驱动 让 DBeaver 与 SQL Server 通信
study.rar 课程提供的压缩包 解压得到 study.bak
study.bak SQL Server 数据库备份 恢复为 Study 数据库

数据访问流程:

macOS 上的 DBeaver
    │  JDBC / TCP 127.0.0.1:1433
    ▼
Docker Desktop
    └── mssql-study 容器(SQL Server 2022, linux/amd64)
          └── Study 数据库
                ├── dbo.S
                ├── dbo.C
                └── dbo.Homework

3. 拉取 SQL Server 镜像

首先确保 Docker Desktop 已启动,然后在 macOS 终端执行:

docker pull --platform linux/amd64 \
  mcr.microsoft.com/mssql/server:2022-latest

参数说明:

  • docker pull:从镜像仓库下载镜像。
  • --platform linux/amd64:指定镜像架构为 AMD64;在 Apple Silicon 上需要跨架构运行。
  • mcr.microsoft.com/mssql/server:2022-latest:Microsoft Container Registry 上的 SQL Server 2022 镜像。

镜像下载成功后,终端显示 Downloaded newer image 或 Image is up to date。

4. 创建 SQL Server 容器

注意:下面是用于复现环境的示例命令。请自行设置一个强密码,如果已有 mssql-study 容器,不要重复执行 docker run。

docker run -d \
  --name mssql-study \
  --platform linux/amd64 \
  -e 'ACCEPT_EULA=Y' \
  -e 'MSSQL_PID=Developer' \
  -e 'MSSQL_SA_PASSWORD=<你自己的密码>' \
  -p 127.0.0.1:1433:1433 \
  -v mssql-study-data:/var/opt/mssql \
  mcr.microsoft.com/mssql/server:2022-latest

主要参数:

参数 含义
-d 后台运行容器
--name mssql-study 为容器命名
--platform linux/amd64 指定 AMD64 平台
ACCEPT_EULA=Y 接受 SQL Server 许可协议
MSSQL_PID=Developer 使用 Developer Edition(开发测试用途)
MSSQL_SA_PASSWORD 设置 SQL Server 管理员 sa 的初始密码
-p 127.0.0.1:1433:1433 将容器的 1433 端口仅映射到 Mac 本机回环地址
-v mssql-study-data:/var/opt/mssql 用 Docker 命名卷持久化数据库文件

检查状态:

docker ps -a
docker logs --tail 60 mssql-study

当日志出现以下文字时,说明数据库引擎已启动:

SQL Server is now ready for client connections.

再测试 TCP 端口:

nc -vz 127.0.0.1 1433

出现 succeeded 表示端口可连接,但还不代表用户名和密码已通过验证。

5. 使用 Homebrew 安装 DBeaver

DBeaver 是 macOS 图形化应用程序,并非只能在终端里使用。通过 Homebrew 安装:

brew install --cask dbeaver-community

本次安装过程中曾出现:

curl: (18) Transferred a partial file
Error: Download failed on Cask 'dbeaver-community'

这次是下载中断,重新执行相同安装命令后下载完成,DBeaver 成功安装到 /Applications/DBeaver.app。

打开软件:

open -a DBeaver

6. 连接 SQL Server

DBeaver 左上角点击 New Database Connection,选择 SQL Server(Microsoft JDBC Driver),不要选 Azure SQL Server 或旧版 jTDS 驱动。

填写连接参数:

字段 配置
Host 127.0.0.1
Port 1433
Database/Schema master
Authentication SQL Server Authentication
Username sa
Password 创建容器时设置的密码
Trust Server Certificate 本地实验环境勾选

本地实验中 SQL Server 使用自签名证书,因此启用 Trust Server Certificate 可以跳过证书身份验证;这不是生产环境的推荐安全配置。

首次连接可能需要下载 JDBC 驱动。本次成功连接时,DBeaver 显示:

Connected (359 ms)
Microsoft SQL Server 2022 Developer Edition
Microsoft JDBC Driver 13.4 for SQL Server

首次测试 SQL

在连接上右键,选择 SQL Editor → New SQL Script:

SELECT 1 + 1 AS TestResult;

执行后返回 TestResult = 2,说明从客户端到数据库引擎的 SQL 执行链路正常。

7. 课程数据库备份:从 study.rar 到 Study

课程提供的是 study.rar 压缩包,解压后得到 study.bak。.bak 不是普通 CSV 数据集,而是 SQL Server 数据库备份文件。

安装 RAR 解压工具:

brew install unar

假设备份下载到 ~/Downloads:

cd ~/Downloads
unar study.rar
ls -lh ~/Downloads/study.bak
file ~/Downloads/study.bak

本次发现 study.bak 已存在,因此解压程序提示是否覆盖;选择跳过,保留已有文件。file 检查结果识别为 Microsoft SQL Server 备份,大小约 2.6 MB。

7.1 复制备份到容器

在 Mac 终端执行:

docker exec -u 0 mssql-study mkdir -p /var/opt/mssql/backup

docker cp ~/Downloads/study.bak \
  mssql-study:/var/opt/mssql/backup/study.bak

docker exec -u 0 mssql-study \
  chown mssql:mssql /var/opt/mssql/backup/study.bak

检查:

docker exec mssql-study ls -lh /var/opt/mssql/backup/study.bak

说明:Mac 的 ~/Downloads/study.bak 与容器内部的 /var/opt/mssql/backup/study.bak 是两个不同的文件路径。SQL Server 执行 RESTORE 时必须读取它能访问到的容器内路径。

7.2 读取备份的逻辑文件名

在 DBeaver 中执行:

RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/backup/study.bak';

本次返回两条记录:

LogicalName Type
Study D(数据文件)
Study_log L(事务日志)

备份的原始 PhysicalName 指向 Windows 文件路径,而 SQL Server 容器运行在 Linux 上,因此恢复时需要使用 WITH MOVE。

7.3 恢复数据库

以下命令仅在目标实例不存在同名 Study 数据库时执行。切勿对已有数据库盲目重复恢复或添加 REPLACE。

RESTORE DATABASE Study
FROM DISK = N'/var/opt/mssql/backup/study.bak'
WITH
    MOVE N'Study' TO N'/var/opt/mssql/data/Study.mdf',
    MOVE N'Study_log' TO N'/var/opt/mssql/data/Study_log.ldf',
    RECOVERY,
    STATS = 10;
  • RESTORE DATABASE:根据备份恢复数据库。
  • MOVE:把备份中的逻辑数据文件映射到 Linux 文件路径。
  • RECOVERY:完成恢复,使数据库可供访问。
  • STATS = 10:定期报告恢复进度。

本次执行后,输出包含:

Database 'Study' running the upgrade ...
RESTORE DATABASE successfully processed ...

7.4 验证数据库及数据表

SELECT name, state_desc
FROM sys.databases
WHERE name = N'Study';

预期:Study | ONLINE。

SELECT TABLE_SCHEMA, TABLE_NAME
FROM Study.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';

本次实际返回:

dbo | S
dbo | C
dbo | Homework

最后可以读取数据:

SELECT TOP (10) * FROM Study.dbo.S;
SELECT TOP (10) * FROM Study.dbo.C;
SELECT TOP (10) * FROM Study.dbo.Homework;

Study.dbo.S 是三段式对象名:数据库名.架构名.表名。即使当前连接默认数据库为 master,也能通过完整名称访问 Study。

8. 实际踩坑记录

8.1 Connection refused

DBeaver 曾提示:

The TCP/IP connection to the host 127.0.0.1, port 1433 has failed.
Connection refused.

检查后发现容器状态是:

mssql-study  Exited (139)

执行:

docker start mssql-study
nc -vz 127.0.0.1 1433

端口测试成功后,DBeaver 不再报连接拒绝。139 通常与段错误有关,ARM64 上模拟运行 AMD64 数据库进程可能是相关因素,但没有充分证据断言唯一原因。

8.2 Login failed for user 'sa'

网络连通后又遇到 sa 登录失败。检查并重新输入正确密码后,连接测试通过。此错误属于身份验证问题,与 TCP 端口拒绝不同。

9. 日常启动和安全退出

下次使用:

# 先启动 Docker Desktop,再运行:
docker start mssql-study
nc -vz 127.0.0.1 1433
open -a DBeaver

打开已有的连接并访问 Study,不需要重新导入备份。

实验结束:

  1. 保存 SQL 脚本,确认需要提交的数据库事务已提交。
  2. 退出 DBeaver。
  3. 在 Mac 终端执行:
docker stop -t 60 mssql-study
docker ps -a --filter name=mssql-study

不要把 docker rm、docker volume rm 当作正常退出命令。命名卷保存的是持久化数据库文件,但不能替代独立备份。

10. 总结

最终完成了以下工作:

  • 在 Apple Silicon Mac 上拉取并运行 AMD64 SQL Server 2022 镜像。
  • 使用 Docker 命名卷保存数据库文件,并将 SQL Server 1433 端口限制为本机访问。
  • 安装 DBeaver Community,通过 Microsoft JDBC Driver 连接 SQL Server。
  • 从课程的 study.rar 中取得 study.bak,复制到容器,使用 RESTORE FILELISTONLY 检查备份。
  • 使用 RESTORE DATABASE ... WITH MOVE 恢复 Study 数据库,确认存在 S、C、Homework 三张表。
  • 记录了容器异常退出、登录失败、下载中断等排查过程。

这套环境可以支持课程中的基础 T-SQL 查询实验,但 SQL Server 官方 AMD64 镜像在 Apple Silicon 上的模拟运行稳定性需要持续验证。建议保留老师提供的原始 .bak 文件,定期导出自己的 SQL 脚本和重要数据。


祝大家生活,工作,学习愉快

posted on 2026-10-16 18:51  tintin7790  阅读(29)  评论(2)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3