# 数据库Docker配置

本目录包含MySQL数据库的Docker容器化配置文件和管理脚本。

## 目录结构

```
database/
├── init/                           # 数据库初始化脚本目录
│   ├── 01-init-database.sql       # 数据库和用户初始化
│   └── 02-schema.sql               # 数据库表结构
├── data/                           # 数据存储目录（运行时创建）
│   ├── mysql/                      # MySQL数据文件
│   └── logs/                       # MySQL日志文件
├── backup/                         # 数据库备份目录（运行时创建）
├── docker-compose.database.yml     # 数据库服务Docker Compose配置
├── .env.database.template          # 环境变量配置模板
├── database-manager.sh             # 数据库管理脚本（Linux/Mac）
├── database-manager.bat            # 数据库管理脚本（Windows）
└── README.md                       # 本文件
```

## 快速开始

### 1. 配置环境变量

复制环境变量模板并根据需要修改：

```bash
# Linux/Mac
cp .env.database.template .env.database

# Windows
copy .env.database.template .env.database
```

编辑 `.env.database` 文件，修改数据库密码等配置。

### 2. 启动数据库

```bash
# Linux/Mac
./database-manager.sh start

# Windows
database-manager.bat start
```

### 3. 检查状态

```bash
# Linux/Mac
./database-manager.sh status

# Windows
database-manager.bat status
```

## 配置说明

### 环境变量配置

主要的环境变量配置项：

| 变量名 | 默认值 | 说明 |
|--------|--------|------|
| `DB_HOST` | anxin-mysql | 数据库主机名 |
| `DB_PORT` | 3306 | 数据库端口 |
| `DB_NAME` | anxin | 数据库名称 |
| `DB_USER` | anxin | 应用数据库用户 |
| `DB_PASSWORD` | anxin123 | 应用数据库密码 |
| `MYSQL_ROOT_PASSWORD` | root123 | MySQL root密码 |
| `DATABASE_MEMORY_LIMIT` | 512M | 内存限制 |
| `DATABASE_CPU_LIMIT` | 0.5 | CPU限制 |

### MySQL配置

MySQL配置文件位于 `../configs/my.cnf.template`，包含以下优化：

- 字符集：utf8mb4
- 时区：Asia/Shanghai
- 连接数：200
- InnoDB缓冲池：128M
- 慢查询日志：启用

### 数据持久化

数据持久化通过Docker卷实现：

- **mysql-data**: 数据库数据文件，挂载到 `./data/mysql`
- **mysql-logs**: 数据库日志文件，挂载到 `./data/logs/mysql`

### 初始化脚本

初始化脚本按文件名字母顺序执行：

1. `01-init-database.sql`: 创建数据库和用户
2. `02-schema.sql`: 导入数据库表结构

## 管理脚本使用

### 基本操作

```bash
# 启动数据库
./database-manager.sh start

# 停止数据库
./database-manager.sh stop

# 重启数据库
./database-manager.sh restart

# 查看状态
./database-manager.sh status
```

### 日志查看

```bash
# 查看最近100行日志
./database-manager.sh logs

# 查看最近50行日志
./database-manager.sh logs 50

# 实时跟踪日志
./database-manager.sh logs
```

### 数据库连接

```bash
# 进入数据库容器
./database-manager.sh exec

# 直接连接MySQL
./database-manager.sh connect
```

### 备份和恢复

```bash
# 备份数据库
./database-manager.sh backup

# 恢复数据库
./database-manager.sh restore backup/anxin_20250104_120000.sql
```

## 网络配置

数据库容器运行在自定义网络 `anxin-network` 中：

- 网络类型：bridge
- 子网：172.20.0.0/16
- 网关：172.20.0.1

## 安全配置

### 密码安全

- 生产环境请修改默认密码
- 使用强密码策略
- 定期更换密码

### 网络安全

- 数据库端口仅在需要时暴露到宿主机
- 使用内部网络进行容器间通信
- 启用防火墙规则

### 文件权限

- 数据目录权限：755
- 配置文件权限：644
- 脚本文件权限：755

## 故障排除

### 常见问题

1. **容器启动失败**
   - 检查端口是否被占用
   - 检查数据目录权限
   - 查看容器日志

2. **数据库连接失败**
   - 检查网络配置
   - 验证用户名密码
   - 确认数据库已完全启动

3. **初始化脚本执行失败**
   - 检查SQL语法
   - 查看初始化日志
   - 验证文件权限

### 日志位置

- 容器日志：`docker-compose logs`
- MySQL错误日志：`./data/logs/mysql/error.log`
- MySQL慢查询日志：`./data/logs/mysql/slow.log`

## 性能优化

### 内存配置

根据服务器配置调整内存限制：

```bash
# 开发环境
DATABASE_MEMORY_LIMIT=512M

# 测试环境
DATABASE_MEMORY_LIMIT=1024M

# 生产环境
DATABASE_MEMORY_LIMIT=2048M
```

### InnoDB优化

主要的InnoDB配置项：

- `innodb_buffer_pool_size`: 缓冲池大小
- `innodb_log_file_size`: 日志文件大小
- `innodb_flush_log_at_trx_commit`: 事务提交策略

## 监控和维护

### 健康检查

容器配置了健康检查：

- 检查间隔：30秒
- 超时时间：20秒
- 重试次数：10次
- 启动等待：60秒

### 定期维护

建议的维护任务：

- 定期备份数据库
- 监控磁盘使用情况
- 检查慢查询日志
- 更新安全补丁

## 集成说明

本数据库配置可以与以下组件集成：

- 后端Spring Boot应用
- 前端Vue3应用
- 监控系统
- 备份系统

通过Docker Compose的依赖配置，确保数据库在其他服务之前启动。