萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

WordPress MySQL 備份恢復與中文亂碼終極解決方案

大型資料庫備份恢復實戰策略

隨著部落格文章增長,單一 SQL 檔案可能超過 phpMyAdmin 上傳限制 (預設 2MB)。分階段策略:

  1. 分表備份:mysqldump -u user -p db_name wp_posts wp_postmeta wp_comments wp_options > partial.sql,核心大表單獨導出。
  2. 壓縮傳輸:mysqldump ... | gzip > backup_$(date +%F).sql.gz,大幅縮小體積。
  3. 分卷上傳:split -b 1M backup.sql.gz backup_part_,分批上傳後伺服器端 cat backup_part_* > backup.sql.gz。
  4. 命令列還原:繞過 PHP 限制,直接 gunzip < backup.sql.gz | mysql -u user -p db_name 或 SOURCE /path/backup.sql (需檔案在伺服器且可讀)。
  5. 自動化腳本:結合 cron + rsync/rclone 推送至異地 (S3、Google Drive、NAS),保留 30 天版本。

中文亂碼根因與徹底治理

亂碼成因鏈路

瀏覽器 → PHP → MySQL 連線 → 儲存引擎 → 檔案系統,任一環節字元集不一致即產生亂碼。

MySQL 端徹底配置

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
skip-character-set-client-handshake  # 強制忽略客戶端字元集宣告

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

重啟後驗證:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

全部應顯示 utf8mb4 / utf8mb4_unicode_ci。

phpMyAdmin 介面設定

  • 語言:中文 (zh-utf-8)
  • MySQL 字元集:UTF-8 Unicode (utf8mb4)
  • MySQL 連線校對:utf8mb4_unicode_ci
  • 新增資料庫/資料表時,整理 (Collation) 選 utf8mb4_unicode_ci。

WordPress 程式碼層強制字元集

修改 wp-includes/wp-db.php (或 wp-config.php 早期掛鉤):

// 在 $this->dbh = @mysql_connect(...) 之後立即加入
$this->query("SET NAMES 'utf8mb4'");
// 或 mysqli 版本
mysqli_set_charset($this->dbh, 'utf8mb4');

※ WordPress 4.2+ 已預設支援 utf8mb4,新安裝無需手動修改;舊站升級請執行 wp cli db charset utf8mb4 或外掛 WP Migrate DB 轉換。

資料庫現有表轉換腳本

# 產生 ALTER 陳述式
SELECT CONCAT('ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'your_wp_db';

執行輸出的 SQL,再執行資料庫層級轉換:

ALTER DATABASE your_wp_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

避坑檢查清單

  • 確認 wp-config.php 定義 define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', 'utf8mb4_unicode_ci');
  • 檢查 Nginx/Apache 回應標頭:Content-Type: text/html; charset=utf-8。
  • PHP mbstring.internal_encoding = UTF-8、default_charset = "UTF-8"。
  • 備份檔案本身編碼必須為 UTF-8 (BOM/無 BOM 均可),不可為 Big5/GBK。
copyright © 萬盛學電腦網 all rights reserved