外观
SQLServer 在 macOS 上安装
安装概述
在macOS上安装SQLServer主要有两种方式:
- Docker容器:推荐方式,使用官方Docker镜像
- 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 mssql2. 运行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 sqlserver20224. 连接到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
- 从Azure Data Studio官网下载并安装Azure Data Studio
- 启动Azure Data Studio
- 点击"新建连接"
- 填写连接信息:
- 服务器:localhost
- 身份验证类型:SQL登录
- 用户名:sa
- 密码:YourStrongPassword123!
- 数据库:默认
- 服务器组:默认
- 名称(可选):SQLServer 2022
- 点击"连接"
安装后配置
1. 修改SA密码
bash
# 连接到SQLServer
sqlcmd -S localhost -U sa -P "YourStrongPassword123!"
# 修改SA密码
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPassword456!';
GO
# 退出sqlcmd
EXIT2. 配置最大内存
默认情况下,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-latest3. 启用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
# 退出容器
exit4. 安装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
排查步骤:
- 检查容器是否正在运行:
docker ps - 检查SA密码是否正确
- 检查端口映射是否正确:
docker port sqlserver2022 - 检查防火墙是否允许1433端口
- 查看容器日志:
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 sqlserver20222. 删除数据文件
bash
# 删除数据持久化目录
rm -rf ~/mssql3. 删除SQLServer镜像
bash
# 删除SQLServer镜像
docker rmi mcr.microsoft.com/mssql/server:2022-latest使用Docker Compose
对于更复杂的环境,可以使用Docker Compose管理SQLServer容器:
- 创建
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- 启动服务:
bash
docker-compose up -d- 停止服务:
bash
docker-compose down总结
在macOS上使用Docker安装SQLServer是一种简单、灵活的方式,适合开发和测试环境。DBA需要根据业务需求和系统资源,合理配置SQLServer容器,遵循最佳实践,确保SQLServer实例的安全、稳定和高效运行。对于生产环境,建议考虑使用Azure SQL Database或在Linux/Windows服务器上安装SQLServer。
