Files
kami-db-migrate/README.md
danial 7bcdcd13cb feat(database): 增加基线版本支持并调整数据库迁移结构
- 在.env.example中添加BASELINE_VERSION配置说明,支持首次部署已有数据库设定
- docker-compose.yml中增加BASELINE_VERSION环境变量传递及命令行基线参数支持
- README.md增加首次部署与后续部署的详细操作说明,强调基线版本设置要求
- 修改schema.sql,重构多张表结构,新增账户历史、代付相关多表设计
- 调整商户隐藏记录、偷卡配置等表,优化字段及索引设计
- 新增atlas_schema_revisions表,支持数据库迁移版本管理
- 删除部分旧表结构,新增限制IP访问相关表支持安全功能
- 迁移文件atlas.sum更新,反映新的迁移文件及校验哈希变化
2025-12-14 19:34:03 +08:00

76 lines
2.0 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.

# 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` 环境变量