前置條件:字符集全鏈路統一為 UTF8MB4
# 1. 檢查本地字符集
mysql> SHOW VARIABLES LIKE 'character_set_%';
# 確認 client/connection/results/database/server 均為 utf8mb4
# 2. 修改本地 my.cnf (永久生效)
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
# 3. 重啟驗證
systemctl restart mysqld
mysql> SHOW VARIABLES LIKE 'character_set_%';
步驟 1:本地匯出 (含結構+資料+觸發器+存儲過程)
mysqldump -h localhost -u root -p \
--default-character-set=utf8mb4 \
--set-charset=utf8mb4 \
--hex-blob \
--single-transaction \
--routines --triggers --events \
--databases mydb > /tmp/mydb_sae.sql
步驟 2:處理 SAE 不支援的語句
# SAE MySQL 禁用 LOCK TABLES、SUPER 權限操作
# 編輯 SQL 檔移除/註解以下行:
sed -i '/LOCK TABLES/d' /tmp/mydb_sae.sql
sed -i '/UNLOCK TABLES/d' /tmp/mydb_sae.sql
sed -i '/SET @@SESSION.SQL_LOG_BIN/d' /tmp/mydb_sae.sql
sed -i '/CHANGE MASTER/d' /tmp/mydb_sae.sql
# 或手動編輯器批次刪除
步驟 3:SAE 控制台匯入
- 登入 SAE 控制台 → 我的應用 → 服務管理 → MySQL → 管理 MySQL
- 點擊「匯入」
- 選擇檔案:
/tmp/mydb_sae.sql
- 檔案字符集:**UTF-8**
- SQL 相容模式:**MYSQL40** (舊版) 或 **ANSI** (新版)
- 點擊「開始匯入」
步驟 4:驗證與應用配置
# 1. 在 SAE phpMyAdmin 或命令列驗證
mysql -h SAE_MYSQL_HOST -P SAE_MYSQL_PORT -u SAE_MYSQL_USER -p
USE mydb;
SHOW TABLES;
SELECT * FROM users LIMIT 5;
# 2. PHP 應用配置 (SAE 環境變數自動注入)
$link = mysqli_connect(
SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,
SAE_MYSQL_USER,
SAE_MYSQL_PASS,
SAE_MYSQL_DB
);
mysqli_set_charset($link, 'utf8mb4');
常見錯誤與解決
| 錯誤 | 原因 | 解決 |
ERROR 1227: Access denied; you need SUPER privilege | SQL 含 SET GLOBAL/CHANGE MASTER 等 | 移除相關行,SAE 僅提供普通權限 |
ERROR 1142: LOCK TABLES command denied | mysqldump 預設加 --lock-tables | 匯出加 --single-transaction (InnoDB) 或匯入前移除 LOCK 行 |
| 中文亂碼 | 字符集不一致 | 全鏈路 utf8mb4、檔案編碼 UTF-8、匯入選 UTF-8 |
| 匯入卡住/超時 | 大表、無索引、網路慢 | 分表匯出、壓縮傳輸、離峰匯入 |
SAE MySQL 限制須知
- 無
SUPER、FILE、SHUTDOWN 權限
- 不支援
LOAD DATA INFILE、SELECT INTO OUTFILE
- 連線數、查詢時間、結果集大小有配額限制
- 不支援自定義函式 (UDF)、插件
- 建議使用 SAE 內建
KVDB、Counter 替代高頻計數
遷移清單
- ☐ 本地字符集統一 utf8mb4
- ☐ mysqldump 含
--single-transaction --hex-blob --routines --triggers --events
- ☐ 移除 LOCK/UNLOCK/SET GLOBAL/CHANGE MASTER
- ☐ SAE 匯入選 UTF-8、MYSQL40/ANSI
- ☐ 應用配置切換 SAE 環境變數
- ☐ 灰度驗證核心業務流程
- ☐ 切換 DNS、下線舊庫