- 在.env.example中添加BASELINE_VERSION配置说明,支持首次部署已有数据库设定 - docker-compose.yml中增加BASELINE_VERSION环境变量传递及命令行基线参数支持 - README.md增加首次部署与后续部署的详细操作说明,强调基线版本设置要求 - 修改schema.sql,重构多张表结构,新增账户历史、代付相关多表设计 - 调整商户隐藏记录、偷卡配置等表,优化字段及索引设计 - 新增atlas_schema_revisions表,支持数据库迁移版本管理 - 删除部分旧表结构,新增限制IP访问相关表支持安全功能 - 迁移文件atlas.sum更新,反映新的迁移文件及校验哈希变化
76 lines
2.0 KiB
Markdown
76 lines
2.0 KiB
Markdown
# Atlas 数据库迁移(版本化)
|
||
|
||
## 文件说明
|
||
|
||
- `atlas.hcl` - Atlas 配置文件
|
||
- `schema.sql` - 数据库 schema 定义(期望状态)
|
||
- `migrations/` - 版本化迁移文件目录
|
||
- `.env.local` - 本地环境配置
|
||
- `.env.example` - 生产环境配置示例
|
||
- `generate-migration.sh` - 生成新的迁移文件
|
||
- `Dockerfile` - Docker 镜像配置
|
||
- `docker-compose.yml` - Docker Compose 配置
|
||
|
||
## 使用步骤
|
||
|
||
### 1. 修改 schema.sql 定义期望状态
|
||
|
||
直接编辑 `schema.sql` 文件,定义期望的数据库结构。
|
||
|
||
### 2. 生成迁移文件
|
||
|
||
```bash
|
||
./generate-migration.sh
|
||
```
|
||
|
||
此命令会对比当前数据库和 schema.sql,生成新的迁移文件到 `migrations/` 目录。
|
||
|
||
### 3. 生产环境部署
|
||
|
||
#### 方式一:Docker Compose(推荐)
|
||
|
||
**首次部署到已有数据库:**
|
||
|
||
```bash
|
||
# 1. 复制环境变量配置
|
||
cp .env.example .env
|
||
|
||
# 2. 修改 .env 文件,填入生产数据库信息
|
||
# DB_USER=root
|
||
# DB_PASSWORD=your_password
|
||
# DB_HOST=mysql_host
|
||
# DB_PORT=3306
|
||
# DB_NAME=production_db
|
||
# BASELINE_VERSION=20251213191759 # 首次部署时取消注释
|
||
|
||
# 3. 执行迁移
|
||
docker-compose up db-migrate
|
||
```
|
||
|
||
**后续部署(数据库已有迁移历史):**
|
||
|
||
```bash
|
||
# .env 文件中注释掉或删除 BASELINE_VERSION
|
||
# 然后执行:
|
||
docker-compose up db-migrate
|
||
```
|
||
|
||
#### 方式二:Docker Run
|
||
|
||
```bash
|
||
atlas schema inspect --env local --format '{{ sql . }}' > schema.sql && echo "已更新 schema.sql
|
||
|
||
docker build -t db-migrate:latest .
|
||
docker run --rm \
|
||
-e DB_URL="mysql://user:password@host:3306/database" \
|
||
db-migrate:latest migrate apply --url $DB_URL --dir file://migrations
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. 使用版本化迁移,每次修改 schema.sql 后需运行 `generate-migration.sh` 生成迁移文件
|
||
2. 迁移文件会按顺序执行,确保数据库状态可追溯
|
||
3. 生产环境需配置 `.env` 文件或设置环境变量
|
||
4. **首次部署到已有数据库:**必须设置 `BASELINE_VERSION=20251213191759` 来标记现有数据库状态
|
||
5. **后续部署:**删除或注释 `BASELINE_VERSION` 环境变量
|