Skip to content

SQLServer 在 macOS 上安装

安装概述

在macOS上安装SQLServer主要有两种方式:

  1. Docker容器:推荐方式,使用官方Docker镜像
  2. Azure SQL Edge:适用于边缘计算场景

本文主要介绍使用Docker容器安装SQLServer 2022的方法。

安装前准备

1. 系统要求

  • macOS 10.15 (Catalina) 或更高版本
  • 至少 4 GB 内存
  • 至少 10 GB 可用磁盘空间
  • Docker Desktop 4.0 或更高版本

2. 安装Docker Desktop

从Docker官方网站下载并安装Docker Desktop:

安装完成后,启动Docker Desktop并完成初始配置。

3. 验证Docker安装

打开终端,运行以下命令验证Docker是否正确安装:

bash
# 检查Docker版本
docker --version

# 检查Docker Compose版本
docker-compose --version

# 运行Docker hello-world镜像验证安装
docker run hello-world

安装步骤

1. 拉取SQLServer Docker镜像

从Docker Hub拉取官方SQLServer 2022镜像:

bash
# 拉取SQLServer 2022镜像
docker pull mcr.microsoft.com/mssql/server:2022-latest

# 验证镜像是否成功拉取
docker images | grep mssql

2. 运行SQLServer容器

使用以下命令运行SQLServer容器:

bash
# 创建数据持久化目录
mkdir -p ~/mssql/data ~/mssql/log ~/mssql/backup

# 运行SQLServer容器
docker run -d \n  --name sqlserver2022 \n  -e "ACCEPT_EULA=Y" \n  -e "SA_PASSWORD=YourStrongPassword123!" \n  -p 1433:1433 \n  -v ~/mssql/data:/var/opt/mssql/data \n  -v ~/mssql/log:/var/opt/mssql/log \n  -v ~/mssql/backup:/var/opt/mssql/backup \n  mcr.microsoft.com/mssql/server:2022-latest

参数说明

  • -d:在后台运行容器
  • --name sqlserver2022:为容器指定名称
  • -e "ACCEPT_EULA=Y":接受SQLServer许可条款
  • -e "SA_PASSWORD=YourStrongPassword123!":设置SA账户密码(必须符合复杂性要求)
  • -p 1433:1433:将容器的1433端口映射到主机的1433端口
  • -v ~/mssql/data:/var/opt/mssql/data:将主机目录挂载到容器的数据目录
  • -v ~/mssql/log:/var/opt/mssql/log:将主机目录挂载到容器的日志目录
  • -v ~/mssql/backup:/var/opt/mssql/backup:将主机目录挂载到容器的备份目录

3. 验证SQLServer容器运行状态

bash
# 查看容器运行状态
docker ps

# 查看容器日志
docker logs sqlserver2022

4. 连接到SQLServer

可以使用以下方式连接到SQLServer:

使用sqlcmd命令行工具

bash
# 使用docker exec在容器内运行sqlcmd
docker exec -it sqlserver2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "YourStrongPassword123!"

# 或在主机上安装sqlcmd工具(需要Homebrew)
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
echo 'export PATH="/opt/homebrew/opt/mssql-tools@18/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 然后使用sqlcmd连接
sqlcmd -S localhost -U sa -P "YourStrongPassword123!"

使用Azure Data Studio

  1. Azure Data Studio官网下载并安装Azure Data Studio
  2. 启动Azure Data Studio
  3. 点击"新建连接"
  4. 填写连接信息:
    • 服务器:localhost
    • 身份验证类型:SQL登录
    • 用户名:sa
    • 密码:YourStrongPassword123!
    • 数据库:默认
    • 服务器组:默认
    • 名称(可选):SQLServer 2022
  5. 点击"连接"

安装后配置

1. 修改SA密码

bash
# 连接到SQLServer
sqlcmd -S localhost -U sa -P "YourStrongPassword123!"

# 修改SA密码
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPassword456!';
GO

# 退出sqlcmd
EXIT

2. 配置最大内存

默认情况下,SQLServer容器会使用所有可用内存。建议限制SQLServer使用的最大内存:

bash
# 停止并删除现有容器
docker stop sqlserver2022
docker rm sqlserver2022

# 使用新的内存限制重新运行容器
docker run -d \n  --name sqlserver2022 \n  -e "ACCEPT_EULA=Y" \n  -e "SA_PASSWORD=NewStrongPassword456!" \n  -p 1433:1433 \n  -v ~/mssql/data:/var/opt/mssql/data \n  -v ~/mssql/log:/var/opt/mssql/log \n  -v ~/mssql/backup:/var/opt/mssql/backup \n  -e "MSSQL_MEMORY_LIMIT_MB=4096" \n  mcr.microsoft.com/mssql/server:2022-latest

3. 启用SQL Server代理

默认情况下,SQL Server代理在容器中是禁用的。可以使用以下命令启用:

bash
# 连接到容器
docker exec -it sqlserver2022 /bin/bash

# 启用SQL Server代理
/opt/mssql/bin/mssql-conf set sqlagent.enabled true

# 重启SQLServer服务
systemctl restart mssql-server

# 退出容器
exit

4. 安装Full-Text Search(可选)

SQLServer 2019及以上版本的Docker镜像默认包含Full-Text Search功能。可以使用以下命令验证:

sql
-- 连接到SQLServer后执行
SELECT SERVERPROPERTY('IsFullTextInstalled') AS IsFullTextInstalled;
GO

最佳实践

1. 安全配置

  • 使用强密码保护SA账户
  • 定期更改SA密码
  • 限制容器的网络访问
  • 启用TLS加密(生产环境建议)

2. 性能优化

  • 为容器分配足够的内存和CPU资源
  • 使用SSD存储数据和日志文件
  • 配置合适的最大服务器内存
  • 定期备份数据库

3. 数据持久化

  • 使用Docker卷或绑定挂载持久化数据
  • 定期备份数据目录
  • 考虑使用Docker Compose管理多容器环境

4. 监控与维护

  • 监控容器资源使用情况:
    bash
    docker stats sqlserver2022
  • 定期查看SQLServer日志:
    bash
    docker logs sqlserver2022
  • 定期更新SQLServer镜像:
    bash
    docker pull mcr.microsoft.com/mssql/server:2022-latest
    docker stop sqlserver2022
    docker rm sqlserver2022
    # 重新运行容器(使用新镜像)

常见问题与解决方案

1. 无法连接到SQLServer

排查步骤

  1. 检查容器是否正在运行:docker ps
  2. 检查SA密码是否正确
  3. 检查端口映射是否正确:docker port sqlserver2022
  4. 检查防火墙是否允许1433端口
  5. 查看容器日志:docker logs sqlserver2022

2. 容器启动失败,提示密码不符合复杂性要求

解决方案: SA密码必须符合以下要求:

  • 至少8个字符长
  • 包含大小写字母
  • 包含数字
  • 包含特殊字符(如!@#$%^&*()_+)

3. 容器运行缓慢

解决方案

  • 为容器分配更多内存和CPU资源:
    bash
    docker run -d \n    --name sqlserver2022 \n    -e "ACCEPT_EULA=Y" \n    -e "SA_PASSWORD=StrongPassword!" \n    -p 1433:1433 \n    -v ~/mssql/data:/var/opt/mssql/data \n    -v ~/mssql/log:/var/opt/mssql/log \n    -v ~/mssql/backup:/var/opt/mssql/backup \n    --memory 8g \n    --cpus 4 \n    mcr.microsoft.com/mssql/server:2022-latest
  • 使用SSD存储数据和日志文件

4. 如何备份和恢复数据库

备份数据库

bash
# 使用sqlcmd备份数据库
sqlcmd -S localhost -U sa -P "StrongPassword!" -Q "BACKUP DATABASE [master] TO DISK = N'/var/opt/mssql/backup/master.bak' WITH NOFORMAT, NOINIT, NAME = N'master-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

# 从容器中复制备份文件到主机
docker cp sqlserver2022:/var/opt/mssql/backup/master.bak ~/Desktop/

恢复数据库

bash
# 将备份文件复制到容器中
docker cp ~/Desktop/master.bak sqlserver2022:/var/opt/mssql/backup/

# 使用sqlcmd恢复数据库
sqlcmd -S localhost -U sa -P "StrongPassword!" -Q "RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/backup/master.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10"

卸载SQLServer

1. 停止并删除容器

bash
# 停止容器
docker stop sqlserver2022

# 删除容器
docker rm sqlserver2022

2. 删除数据文件

bash
# 删除数据持久化目录
rm -rf ~/mssql

3. 删除SQLServer镜像

bash
# 删除SQLServer镜像
docker rmi mcr.microsoft.com/mssql/server:2022-latest

使用Docker Compose

对于更复杂的环境,可以使用Docker Compose管理SQLServer容器:

  1. 创建docker-compose.yml文件:
yaml
version: '3.8'

services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: sqlserver2022
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=YourStrongPassword123!
      - MSSQL_MEMORY_LIMIT_MB=4096
    ports:
      - "1433:1433"
    volumes:
      - ./mssql/data:/var/opt/mssql/data
      - ./mssql/log:/var/opt/mssql/log
      - ./mssql/backup:/var/opt/mssql/backup
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '4'
          memory: 8G
  1. 启动服务:
bash
docker-compose up -d
  1. 停止服务:
bash
docker-compose down

总结

在macOS上使用Docker安装SQLServer是一种简单、灵活的方式,适合开发和测试环境。DBA需要根据业务需求和系统资源,合理配置SQLServer容器,遵循最佳实践,确保SQLServer实例的安全、稳定和高效运行。对于生产环境,建议考虑使用Azure SQL Database或在Linux/Windows服务器上安装SQLServer。