2025-09-01 23:44:57 +08:00

218 lines
5.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SQL Server 2022 Linux Docker Compose 部署指南
## 概述
这是一个完整的SQL Server 2022 Linux Docker Compose部署方案包含数据库初始化、用户管理、性能优化等配置。
## 文件结构
```
├── docker-compose-sqlserver.yml # Docker Compose 配置文件
├── sqlserver.env # 环境变量配置文件
├── sqlserver/ # SQL Server 相关目录
│ ├── init/ # 初始化脚本目录
│ │ ├── 01-create-database.sql # 创建数据库和表
│ │ ├── 02-create-user.sql # 创建用户和权限
│ │ └── 03-performance-config.sql # 性能优化配置
│ ├── data/ # 数据文件目录
│ ├── logs/ # 日志文件目录
│ ├── backup/ # 备份文件目录
│ └── web-config/ # Web管理界面配置
└── SQLServer-README.md # 本说明文档
```
## 快速开始
### 1. 配置环境变量
复制并修改环境变量文件:
```bash
cp sqlserver.env .env
```
编辑 `.env` 文件,修改以下关键配置:
```bash
# 修改SA密码必须
SQLSERVER_SA_PASSWORD=YourStrong@Password123!
# 修改端口(可选,避免冲突)
SQLSERVER_PORT=1433
# 选择SQL Server版本
SQLSERVER_EDITION=Developer # 免费开发版本
```
### 2. 启动服务
```bash
# 启动SQL Server
docker-compose -f docker-compose-sqlserver.yml --env-file .env up -d
# 查看服务状态
docker-compose -f docker-compose-sqlserver.yml ps
# 查看日志
docker-compose -f docker-compose-sqlserver.yml logs -f sqlserver
```
### 3. 连接数据库
#### 使用 sqlcmd 连接
```bash
# 进入容器
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!'
# 或者直接执行SQL
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "SELECT name FROM sys.databases"
```
#### 使用外部工具连接
- **服务器**: `localhost` 或你的服务器IP
- **端口**: `1433`(或你在.env中配置的端口
- **用户名**: `sa`
- **密码**: 你在.env中配置的密码
- **数据库**: `SampleDB`(初始化脚本创建的示例数据库)
## 配置说明
### SQL Server 版本选择
`sqlserver.env` 中配置 `SQLSERVER_EDITION`
- `Developer`: 免费开发版本(推荐用于开发环境)
- `Express`: 免费轻量版本
- `Standard`: 标准版
- `Enterprise`: 企业版
### 资源限制
默认配置:
- CPU限制: 4核心
- 内存限制: 8GB
- 数据目录: `./sqlserver/data`
- 日志目录: `./sqlserver/logs`
### 网络配置
- 默认端口: 1433
- 网络子网: 172.24.0.0/16
- 容器间通信: 通过 `sqlserver-net` 网络
## 初始化脚本说明
### 01-create-database.sql
- 创建 `SampleDB` 示例数据库
- 创建 `Users` 示例表
- 插入示例数据
- 创建 `GetActiveUsers` 存储过程
### 02-create-user.sql
- 创建 `appuser` 应用程序用户
- 配置用户权限
- 授予必要的数据库权限
### 03-performance-config.sql
- 配置最大内存使用量
- 设置最大并行度
- 启用查询存储
- 创建性能监控视图
## 常用操作
### 备份数据库
```bash
# 创建备份
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/backup/SampleDB.bak'"
```
### 恢复数据库
```bash
# 恢复备份
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/backup/SampleDB.bak'"
```
### 查看性能统计
```bash
# 查看性能统计
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -d SampleDB -Q "SELECT * FROM PerformanceStats"
```
### 停止和清理
```bash
# 停止服务
docker-compose -f docker-compose-sqlserver.yml down
# 停止并删除数据卷(谨慎使用)
docker-compose -f docker-compose-sqlserver.yml down -v
```
## 故障排除
### 常见问题
1. **容器启动失败**
- 检查密码是否符合复杂度要求
- 确保端口没有被占用
- 查看容器日志: `docker-compose logs sqlserver`
2. **连接失败**
- 确认防火墙设置
- 检查网络配置
- 验证用户名和密码
3. **性能问题**
- 调整内存限制
- 检查磁盘空间
- 查看性能监控视图
### 日志查看
```bash
# 查看SQL Server日志
docker-compose -f docker-compose-sqlserver.yml logs sqlserver
# 查看系统日志
docker exec -it sqlserver-2022 cat /var/opt/mssql/log/errorlog
```
## 安全建议
1. **修改默认密码**: 使用强密码
2. **限制网络访问**: 配置防火墙规则
3. **定期备份**: 设置自动备份策略
4. **监控访问**: 启用审计日志
5. **更新补丁**: 定期更新SQL Server镜像
## 扩展功能
### 添加更多数据库
`sqlserver/init/` 目录下创建新的 `.sql` 文件,它们将按文件名顺序执行。
### 集成其他服务
可以将此SQL Server配置集成到现有的Docker Compose网络中
```yaml
networks:
- your-existing-network
```
## 许可证
SQL Server 2022 Developer Edition 可免费用于开发和测试环境。生产环境请确保使用适当的许可证。
## 支持
如有问题,请查看:
- [SQL Server 2022 官方文档](https://docs.microsoft.com/en-us/sql/sql-server/)
- [Docker Hub SQL Server 页面](https://hub.docker.com/_/microsoft-mssql-server)