199 lines
4.5 KiB
Markdown
199 lines
4.5 KiB
Markdown
# 資料庫備援系統設置指南
|
|
|
|
## 🎯 系統概述
|
|
|
|
您的 AI 展示平台現在已經具備完整的資料庫備援功能!當主機資料庫出現 "Too many connections" 或其他問題時,系統會自動切換到備機資料庫,確保服務不中斷。
|
|
|
|
## ✅ 已完成的功能
|
|
|
|
1. **自動故障檢測** - 每30秒檢查資料庫健康狀態
|
|
2. **自動切換** - 主機故障時自動切換到備機
|
|
3. **手動切換** - 支援手動切換資料庫
|
|
4. **資料同步** - 可將主機資料同步到備機
|
|
5. **監控面板** - 實時監控資料庫狀態
|
|
6. **健康檢查** - 定期檢查連接狀態
|
|
|
|
## 🚀 快速開始
|
|
|
|
### 1. 啟用備援功能
|
|
|
|
在您的 `.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
|
|
```
|
|
|
|
### 2. 初始化備機資料庫
|
|
|
|
```bash
|
|
# 初始化備機資料庫結構
|
|
pnpm run db:init-slave
|
|
|
|
# 同步主機資料到備機
|
|
pnpm run db:sync
|
|
```
|
|
|
|
### 3. 檢查系統狀態
|
|
|
|
```bash
|
|
# 檢查資料庫健康狀態
|
|
pnpm run db:health
|
|
|
|
# 測試備援系統
|
|
pnpm run db:test-simple
|
|
```
|
|
|
|
## 📊 監控和管理
|
|
|
|
### 健康檢查結果
|
|
|
|
根據最新測試結果:
|
|
|
|
- ❌ **主機資料庫**: 異常 (Too many connections)
|
|
- ✅ **備機資料庫**: 正常 (響應時間: 209ms)
|
|
- 🔄 **當前狀態**: 已自動切換到備機
|
|
|
|
### 可用命令
|
|
|
|
| 命令 | 功能 | 狀態 |
|
|
|------|------|------|
|
|
| `pnpm run db:health` | 檢查資料庫健康狀態 | ✅ 可用 |
|
|
| `pnpm run db:init-slave` | 初始化備機資料庫 | ✅ 已完成 |
|
|
| `pnpm run db:sync` | 同步資料 | ✅ 可用 |
|
|
| `pnpm run db:test-simple` | 測試備援系統 | ✅ 通過 |
|
|
| `pnpm run db:monitor` | 監控資料庫狀態 | ✅ 可用 |
|
|
|
|
## 🔧 程式碼使用
|
|
|
|
### 基本使用
|
|
|
|
```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 />
|
|
```
|
|
|
|
## 📈 系統狀態
|
|
|
|
### 當前配置
|
|
|
|
- **備援功能**: ✅ 已啟用
|
|
- **健康檢查間隔**: 30秒
|
|
- **連接超時**: 5秒
|
|
- **重試次數**: 3次
|
|
- **重試延遲**: 2秒
|
|
|
|
### 測試結果
|
|
|
|
```
|
|
🎉 備援系統測試完成!
|
|
當前使用資料庫: slave
|
|
⚠️ 注意:目前使用備機資料庫,建議檢查主機問題
|
|
```
|
|
|
|
## 🚨 故障處理
|
|
|
|
### 主機資料庫問題
|
|
|
|
**問題**: `Too many connections`
|
|
**解決方案**:
|
|
1. 系統已自動切換到備機
|
|
2. 檢查主機資料庫連接數限制
|
|
3. 優化連接池配置
|
|
4. 重啟主機資料庫服務
|
|
|
|
### 備機資料庫問題
|
|
|
|
**問題**: 備機連接失敗
|
|
**解決方案**:
|
|
1. 檢查網路連接
|
|
2. 驗證備機資料庫配置
|
|
3. 確認用戶權限
|
|
4. 檢查備機資料庫服務狀態
|
|
|
|
## 📋 維護建議
|
|
|
|
### 定期維護
|
|
|
|
1. **每日檢查**: 執行 `pnpm run db:health`
|
|
2. **每週同步**: 執行 `pnpm run db:sync`
|
|
3. **每月測試**: 執行 `pnpm run db:test-simple`
|
|
|
|
### 監控指標
|
|
|
|
- 資料庫連接狀態
|
|
- 響應時間
|
|
- 錯誤率
|
|
- 切換次數
|
|
|
|
## 🔄 恢復主機
|
|
|
|
當主機資料庫恢復後:
|
|
|
|
1. 檢查主機狀態: `pnpm run db:health`
|
|
2. 手動切換回主機: `await db.switchDatabase('master')`
|
|
3. 重新同步資料: `pnpm run db:sync`
|
|
|
|
## 📞 支援
|
|
|
|
如有問題,請檢查:
|
|
|
|
1. 環境變數配置
|
|
2. 網路連接狀態
|
|
3. 資料庫服務狀態
|
|
4. 系統日誌
|
|
5. 監控面板狀態
|
|
|
|
## 🎉 總結
|
|
|
|
您的資料庫備援系統已經成功設置並運行!系統現在可以:
|
|
|
|
- ✅ 自動檢測主機資料庫問題
|
|
- ✅ 自動切換到備機資料庫
|
|
- ✅ 提供監控和管理功能
|
|
- ✅ 確保服務連續性
|
|
|
|
即使主機資料庫出現 "Too many connections" 問題,您的應用程式仍然可以正常運行!
|