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

6.2 KiB
Raw Blame History

資料庫備援系統說明

概述

本系統實現了主機和備機資料庫的自動備援機制,當主機資料庫出現問題時,系統會自動切換到備機資料庫,確保服務的連續性和穩定性。

功能特點

  • 自動故障檢測和切換
  • 健康檢查機制
  • 手動切換功能
  • 資料同步功能
  • 監控面板
  • 連接池管理
  • 重試機制

環境變數配置

.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. 初始化備機資料庫

首先在備機上創建資料庫結構:

# 初始化備機資料庫結構
pnpm run db:init-slave

2. 同步資料

將主機的資料同步到備機:

# 同步所有資料
pnpm run db:sync

3. 檢查健康狀態

檢查主機和備機的連接狀態:

# 檢查資料庫健康狀態
pnpm run db:health

使用方法

程式碼中使用

系統會自動使用備援功能,無需修改現有程式碼:

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'); // 切換到主機

監控面板

訪問管理後台查看資料庫狀態:

import { DatabaseMonitor } from '@/components/admin/database-monitor';

// 在管理頁面中使用
<DatabaseMonitor />

API 端點

獲取資料庫狀態

GET /api/admin/database-status

回應:

{
  "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"
  }
}

切換資料庫

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. 監控面板狀態