Skip to content

Commit 20dab97

Browse files
committed
feat: add scripts for init db
Signed-off-by: Xin Liu <[email protected]>
1 parent 0fc9155 commit 20dab97

File tree

4 files changed

+200
-0
lines changed

4 files changed

+200
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
/target
2+
3+
*.db
4+
*.db-shm
5+
*.db-wal

README.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# ss-proxy
2+
3+
一个使用 SQLite 存储会话信息的代理服务。
4+
5+
## 数据库初始化
6+
7+
### 方式 1:使用 Shell 脚本(推荐)
8+
9+
```bash
10+
# 给脚本添加执行权限
11+
chmod +x init_db.sh
12+
13+
# 执行初始化(默认创建 ./sessions.db)
14+
./init_db.sh
15+
16+
# 或指定自定义数据库路径
17+
./init_db.sh /path/to/custom.db
18+
```
19+
20+
### 方式 2:直接使用 sqlite3 命令
21+
22+
```bash
23+
# 创建数据库并执行初始化脚本
24+
sqlite3 sessions.db < migrations/init.sql
25+
26+
# 或指定自定义路径
27+
sqlite3 /path/to/custom.db < migrations/init.sql
28+
```
29+
30+
## 数据库结构
31+
32+
### sessions 表
33+
34+
| 字段名 | 类型 | 约束 | 说明 |
35+
|--------|------|------|------|
36+
| `session_id` | TEXT | PRIMARY KEY | 会话ID(主键) |
37+
| `downstream_server_url` | TEXT | NOT NULL | 下游服务器URL |
38+
| `downstream_server_status` | TEXT | NOT NULL | 下游服务器状态 |
39+
| `created_at` | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 |
40+
| `updated_at` | DATETIME | DEFAULT CURRENT_TIMESTAMP | 更新时间 |
41+
42+
### 索引
43+
44+
- `idx_session_status`: 基于 `downstream_server_status` 的索引
45+
- `idx_created_at`: 基于 `created_at` 的索引
46+
47+
## 常用数据库操作
48+
49+
### 交互式操作(推荐)
50+
51+
进入 SQLite 交互式命令行:
52+
53+
```bash
54+
sqlite3 sessions.db
55+
```
56+
57+
在交互式环境中执行操作:
58+
59+
```sql
60+
-- 查询所有会话
61+
SELECT * FROM sessions;
62+
63+
-- 根据 session_id 查询
64+
SELECT * FROM sessions WHERE session_id = 'your-session-id';
65+
66+
-- 查询特定状态的会话
67+
SELECT * FROM sessions WHERE downstream_server_status = 'active';
68+
69+
-- 插入数据
70+
INSERT INTO sessions (session_id, downstream_server_url, downstream_server_status)
71+
VALUES ('session-001', 'http://localhost:8080', 'active');
72+
73+
-- 更新数据
74+
UPDATE sessions SET downstream_server_status = 'inactive'
75+
WHERE session_id = 'session-001';
76+
77+
-- 删除数据
78+
DELETE FROM sessions WHERE session_id = 'session-001';
79+
80+
-- 退出
81+
.quit
82+
```
83+
84+
### 使用 SQL 文件(推荐用于批量操作)
85+
86+
创建 SQL 文件(例如 `query.sql`):
87+
88+
```sql
89+
SELECT * FROM sessions WHERE downstream_server_status = 'active';
90+
```
91+
92+
执行 SQL 文件:
93+
94+
```bash
95+
sqlite3 sessions.db < query.sql
96+
```
97+
98+
### 单行命令(简单查询)
99+
100+
对于简单的只读查询,可以使用单行命令:
101+
102+
```bash
103+
# 查询所有会话(使用单引号)
104+
sqlite3 sessions.db 'SELECT * FROM sessions;'
105+
106+
# 统计会话数量
107+
sqlite3 sessions.db 'SELECT COUNT(*) FROM sessions;'
108+
```
109+
110+
**注意**:对于包含复杂 SQL 语句(特别是带逗号的 INSERT/UPDATE 语句),建议使用交互式模式或 SQL 文件方式,以避免 shell 解析问题。
111+
112+
## 开发
113+
114+
```bash
115+
# 构建项目
116+
cargo build
117+
118+
# 运行项目
119+
cargo run
120+
```

init_db.sh

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/bash
2+
3+
# ss-proxy 数据库初始化脚本
4+
# 用途:执行 SQL 脚本创建数据库表结构
5+
6+
set -e # 遇到错误立即退出
7+
8+
# 默认数据库路径
9+
DB_PATH="${1:-./sessions.db}"
10+
11+
echo "================================================"
12+
echo " ss-proxy 数据库初始化工具"
13+
echo "================================================"
14+
echo ""
15+
echo "数据库路径: $DB_PATH"
16+
echo ""
17+
18+
# 检查 sqlite3 是否安装
19+
if ! command -v sqlite3 &> /dev/null; then
20+
echo "❌ 错误: 未找到 sqlite3 命令"
21+
echo "请先安装 SQLite: brew install sqlite"
22+
exit 1
23+
fi
24+
25+
# 检查 SQL 脚本是否存在
26+
if [ ! -f "migrations/init.sql" ]; then
27+
echo "❌ 错误: 未找到 migrations/init.sql 文件"
28+
exit 1
29+
fi
30+
31+
# 执行 SQL 脚本
32+
echo "正在执行初始化脚本..."
33+
if sqlite3 "$DB_PATH" < migrations/init.sql; then
34+
echo ""
35+
echo "================================================"
36+
echo "✅ 数据库初始化成功!"
37+
echo "================================================"
38+
echo ""
39+
echo "数据库位置: $DB_PATH"
40+
echo ""
41+
echo "查看表结构:"
42+
echo " sqlite3 $DB_PATH '.schema sessions'"
43+
echo ""
44+
echo "查询数据:"
45+
echo " sqlite3 $DB_PATH 'SELECT * FROM sessions;'"
46+
echo ""
47+
else
48+
echo ""
49+
echo "❌ 数据库初始化失败"
50+
exit 1
51+
fi

migrations/init.sql

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
-- ss-proxy 数据库初始化脚本
2+
-- 功能:创建 sessions 表用于存储会话和下游服务器信息
3+
4+
-- 创建 sessions 表
5+
CREATE TABLE IF NOT EXISTS sessions (
6+
session_id TEXT PRIMARY KEY NOT NULL,
7+
downstream_server_url TEXT NOT NULL,
8+
downstream_server_status TEXT NOT NULL,
9+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
10+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
11+
);
12+
13+
-- 创建索引以提高查询性能
14+
CREATE INDEX IF NOT EXISTS idx_session_status
15+
ON sessions(downstream_server_status);
16+
17+
-- 创建索引以提高按创建时间查询的性能
18+
CREATE INDEX IF NOT EXISTS idx_created_at
19+
ON sessions(created_at);
20+
21+
-- 显示创建成功的信息
22+
SELECT '✅ sessions 表创建成功' AS status;
23+
24+
-- 显示表结构
25+
.schema sessions

0 commit comments

Comments
 (0)