# MySQL 資料庫遷移指南 ## 📋 概述 本指南將幫助您將心願星河專案從 Supabase 遷移到 MySQL 資料庫。 ## 🗄️ 資料庫資訊 - **主機**: mysql.theaken.com - **端口**: 33306 - **資料庫名**: db_wish_pool - **用戶名**: wish_pool - **密碼**: Aa123456 ## 🚀 遷移步驟 ### 1. 環境準備 #### 1.1 安裝依賴 ```bash npm install @prisma/client prisma mysql2 ``` #### 1.2 設定環境變數 創建 `.env.local` 檔案: ```env # MySQL 資料庫連接 DATABASE_URL="mysql://wish_pool:Aa123456@mysql.theaken.com:33306/db_wish_pool?schema=public" # 資料庫類型 (mysql 或 supabase) DATABASE_TYPE="mysql" # 其他配置... NEXT_PUBLIC_APP_NAME="資訊部.心願星河" ENABLE_IP_WHITELIST=false ``` ### 2. 資料庫初始化 #### 2.1 執行資料庫結構腳本 ```bash # 連接到 MySQL 並執行結構腳本 mysql -h mysql.theaken.com -P 33306 -u wish_pool -p db_wish_pool < scripts/mysql-schema.sql ``` #### 2.2 生成 Prisma 客戶端 ```bash npx prisma generate ``` #### 2.3 測試資料庫連接 ```bash node scripts/test-mysql-connection.js ``` ### 3. 資料遷移 #### 3.1 從 Supabase 遷移數據 ```bash # 確保 Supabase 環境變數已設定 export NEXT_PUBLIC_SUPABASE_URL="your-supabase-url" export NEXT_PUBLIC_SUPABASE_ANON_KEY="your-supabase-key" # 執行遷移腳本 node scripts/migrate-to-mysql.js ``` #### 3.2 驗證遷移結果 ```bash # 檢查數據是否正確遷移 node scripts/test-mysql-connection.js ``` ### 4. 更新應用程式配置 #### 4.1 更新服務層 將現有的 Supabase 服務替換為統一的資料庫服務: ```typescript // 在需要的地方替換 import { WishService, LikeService, UserSettingsService } from '@/lib/database-service' // 而不是 // import { WishService } from '@/lib/supabase-service' ``` #### 4.2 更新頁面組件 確保所有頁面都使用新的服務層: ```typescript // app/submit/page.tsx import { WishService } from '@/lib/database-service' // app/wishes/page.tsx import { WishService, LikeService } from '@/lib/database-service' // app/analytics/page.tsx import { WishService } from '@/lib/database-service' ``` ### 5. 測試和驗證 #### 5.1 功能測試 1. 測試困擾案例創建 2. 測試困擾案例顯示 3. 測試點讚功能 4. 測試分析頁面 5. 測試用戶設定 #### 5.2 性能測試 ```bash # 啟動開發服務器 npm run dev # 測試各項功能 ``` ## 📊 資料庫結構 ### 主要表格 1. **wishes** - 困擾案例主表 - 支援多媒體內容 (JSON格式) - 公開/私密狀態控制 - 自動分類和優先級 2. **wish_likes** - 點讚記錄表 - 匿名會話追蹤 - 防重複點讚機制 3. **user_settings** - 用戶設定表 - 音樂偏好設定 - 主題和語言選項 4. **migration_log** - 數據遷移記錄 - 遷移過程追蹤 5. **system_stats** - 系統統計表 - 日統計數據 - 儲存使用量追蹤 ### 視圖和函數 - **wishes_with_likes**: 帶點讚數的困擾視圖 - **GetWishesStats()**: 統計數據存儲過程 ## 🔧 故障排除 ### 常見問題 #### 1. 連接失敗 ``` Error: connect ECONNREFUSED ``` **解決方案**: 檢查資料庫連接資訊和網路連接 #### 2. 權限錯誤 ``` Error: Access denied for user 'wish_pool'@'%' ``` **解決方案**: 確認資料庫用戶權限設定 #### 3. 表格不存在 ``` Error: Table 'db_wish_pool.wishes' doesn't exist ``` **解決方案**: 執行 `scripts/mysql-schema.sql` 腳本 #### 4. 存儲過程錯誤 ``` Error: PROCEDURE GetWishesStats does not exist ``` **解決方案**: 重新執行資料庫結構腳本 ### 調試工具 #### 1. 檢查資料庫狀態 ```sql -- 連接到 MySQL mysql -h mysql.theaken.com -P 33306 -u wish_pool -p db_wish_pool -- 檢查表格 SHOW TABLES; -- 檢查視圖 SHOW FULL TABLES WHERE Table_type = 'VIEW'; -- 檢查存儲過程 SHOW PROCEDURE STATUS WHERE Db = 'db_wish_pool'; ``` #### 2. 檢查數據遷移 ```sql -- 檢查困擾案例數量 SELECT COUNT(*) FROM wishes; -- 檢查點讚記錄 SELECT COUNT(*) FROM wish_likes; -- 檢查用戶設定 SELECT COUNT(*) FROM user_settings; ``` ## 📈 性能優化 ### 索引優化 資料庫已包含以下索引: - `idx_public_created` - 公開困擾按時間排序 - `idx_user_session` - 用戶會話查詢 - `idx_category` - 分類查詢 - `idx_wish_id` - 點讚關聯查詢 ### 查詢優化 - 使用視圖 `wishes_with_likes` 減少 JOIN 查詢 - 使用存儲過程 `GetWishesStats()` 提高統計查詢效率 - 適當使用分頁限制結果集大小 ## 🔄 回滾方案 如果需要回滾到 Supabase: 1. 更新環境變數: ```env DATABASE_TYPE="supabase" ``` 2. 恢復原始服務導入: ```typescript import { WishService } from '@/lib/supabase-service' ``` 3. 重新部署應用程式 ## 📞 支援 如果遇到問題,請檢查: 1. 資料庫連接是否正常 2. 環境變數是否正確設定 3. 資料庫結構是否完整 4. 遷移腳本是否成功執行 ## ✅ 完成檢查清單 - [ ] 環境變數設定完成 - [ ] 資料庫結構創建完成 - [ ] Prisma 客戶端生成完成 - [ ] 資料遷移執行完成 - [ ] 應用程式配置更新完成 - [ ] 功能測試通過 - [ ] 性能測試通過 - [ ] 文檔更新完成 --- **注意**: 遷移過程中請確保備份重要數據,並在測試環境中先進行完整測試。