Files
ai-showcase-platform/README-DATABASE-FAILOVER.md

276 lines
6.2 KiB
Markdown
Raw 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.

# 資料庫備援系統說明
## 概述
本系統實現了主機和備機資料庫的自動備援機制,當主機資料庫出現問題時,系統會自動切換到備機資料庫,確保服務的連續性和穩定性。
## 功能特點
- ✅ 自動故障檢測和切換
- ✅ 健康檢查機制
- ✅ 手動切換功能
- ✅ 資料同步功能
- ✅ 監控面板
- ✅ 連接池管理
- ✅ 重試機制
## 環境變數配置
`.env` 文件中添加以下配置:
```env
# ===== 主機資料庫配置 =====
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_AI_Platform
DB_USER=AI_Platform
DB_PASSWORD=Aa123456
# ===== 備機資料庫配置 =====
SLAVE_DB_HOST=122.100.99.161
SLAVE_DB_PORT=43306
SLAVE_DB_NAME=db_nighttime_care_record
SLAVE_DB_USER=A999
SLAVE_DB_PASSWORD=1023
# ===== 資料庫備援配置 =====
DB_FAILOVER_ENABLED=true
DB_HEALTH_CHECK_INTERVAL=30000
DB_CONNECTION_TIMEOUT=5000
DB_RETRY_ATTEMPTS=3
DB_RETRY_DELAY=2000
```
## 初始化步驟
### 1. 初始化備機資料庫
首先在備機上創建資料庫結構:
```bash
# 初始化備機資料庫結構
pnpm run db:init-slave
```
### 2. 同步資料
將主機的資料同步到備機:
```bash
# 同步所有資料
pnpm run db:sync
```
### 3. 檢查健康狀態
檢查主機和備機的連接狀態:
```bash
# 檢查資料庫健康狀態
pnpm run db:health
```
## 使用方法
### 程式碼中使用
系統會自動使用備援功能,無需修改現有程式碼:
```typescript
import { db } from '@/lib/database';
// 查詢資料
const users = await db.query('SELECT * FROM users');
// 插入資料
await db.insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John', 'john@example.com']);
// 獲取備援狀態
const status = db.getFailoverStatus();
console.log('當前使用資料庫:', status?.currentDatabase);
// 手動切換資料庫
await db.switchDatabase('slave'); // 切換到備機
await db.switchDatabase('master'); // 切換到主機
```
### 監控面板
訪問管理後台查看資料庫狀態:
```typescript
import { DatabaseMonitor } from '@/components/admin/database-monitor';
// 在管理頁面中使用
<DatabaseMonitor />
```
### API 端點
#### 獲取資料庫狀態
```http
GET /api/admin/database-status
```
回應:
```json
{
"success": true,
"data": {
"isEnabled": true,
"currentDatabase": "master",
"masterHealthy": true,
"slaveHealthy": true,
"lastHealthCheck": "2024-01-01T12:00:00.000Z",
"consecutiveFailures": 0,
"uptime": 3600,
"timestamp": "2024-01-01T12:00:00.000Z"
}
}
```
#### 切換資料庫
```http
POST /api/admin/database-status
Content-Type: application/json
{
"action": "switch",
"database": "slave"
}
```
## 腳本命令
| 命令 | 說明 |
|------|------|
| `pnpm run db:init-slave` | 初始化備機資料庫結構 |
| `pnpm run db:sync` | 同步主機資料到備機 |
| `pnpm run db:health` | 檢查資料庫健康狀態 |
| `pnpm run db:monitor` | 執行健康檢查並顯示結果 |
## 故障處理
### 自動切換
當主機資料庫出現以下問題時,系統會自動切換到備機:
- 連接超時
- 連接重置
- 協議錯誤
- 其他連接相關錯誤
### 手動切換
如果需要手動切換資料庫:
1. 通過監控面板切換
2. 通過 API 切換
3. 通過程式碼切換
### 故障恢復
當主機資料庫恢復後:
1. 系統會自動檢測到主機恢復
2. 可以手動切換回主機
3. 建議重新同步資料
## 監控和日誌
### 健康檢查
- 每 30 秒自動檢查一次
- 檢查連接狀態和響應時間
- 記錄連續失敗次數
### 日誌記錄
系統會記錄以下事件:
- 資料庫切換事件
- 連接失敗事件
- 健康檢查結果
- 同步操作結果
### 監控指標
- 當前使用的資料庫
- 主機和備機的健康狀態
- 最後檢查時間
- 連續失敗次數
- 系統運行時間
## 注意事項
1. **資料一致性**:備機資料可能不是實時同步的,建議定期同步
2. **性能影響**:備援機制會增加少量性能開銷
3. **網路依賴**:需要確保主機和備機之間的網路連接穩定
4. **權限配置**:確保備機資料庫有足夠的權限進行操作
## 故障排除
### 常見問題
1. **備機連接失敗**
- 檢查網路連接
- 驗證資料庫配置
- 確認用戶權限
2. **同步失敗**
- 檢查表結構是否一致
- 確認資料庫權限
- 查看錯誤日誌
3. **自動切換不工作**
- 確認 `DB_FAILOVER_ENABLED=true`
- 檢查健康檢查間隔設定
- 查看系統日誌
### 日誌位置
- 應用程式日誌:控制台輸出
- 資料庫日誌MySQL 錯誤日誌
- 系統日誌:系統日誌文件
## 最佳實踐
1. **定期備份**:即使有備援機制,仍建議定期備份資料
2. **監控告警**:設定監控告警,及時發現問題
3. **測試切換**:定期測試備援切換功能
4. **性能監控**:監控資料庫性能指標
5. **文檔更新**:保持配置文檔的更新
## 技術架構
```
┌─────────────────┐ ┌─────────────────┐
│ 應用程式 │ │ 應用程式 │
└─────────┬───────┘ └─────────┬───────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 資料庫服務 │ │ 備援服務 │
│ (主機) │ │ (備機) │
└─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ MySQL 主機 │ │ MySQL 備機 │
│ mysql.theaken │ │ 122.100.99.161│
│ .com:33306 │ │ :43306 │
└─────────────────┘ └─────────────────┘
```
## 支援
如有問題,請檢查:
1. 環境變數配置
2. 網路連接狀態
3. 資料庫服務狀態
4. 系統日誌
5. 監控面板狀態