首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Movable Type 後台資料從 Berkeley DB 遷移至 MySQL 實戰記錄:mt-db-convert、mt-db2sql、編碼修復

     編輯:MySQL 資料庫相關知識

遷移動機

  • 關係資料庫靈活性:SQL 批量更新屬性、複雜查詢、報表分析。
  • 主機商 DreamHost 提供 MySQL,預先適配生產環境。
  • 技術棧統一:團隊熟悉 MySQL,Berkeley DB 維護成本高。

環境準備

  • MySQL 5.0.27,Port 3306,字元集 UTF-8。
  • 建立資料庫:CREATE DATABASE mt CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 建立專用帳號:GRANT ALL ON mt.* TO 'mt_user'@'localhost' IDENTIFIED BY 'strong_pass';

方案一:第三方工具 mt-db-convert.cgi (支援 MT 3.1x)

  1. 下載放入 cgi-bin/mt/,瀏覽器訪問。
  2. 填入 MySQL 連線資訊,點擊 Convert。
  3. 輸出日誌顯示各物件轉換筆數 (Author, Blog, Entry, Comment, Category...)。
  4. 修改 mt-config.cgi 指向 MySQL:
ObjectDriver DBI::mysql
Database mt
DBUser mt_user
DBPassword pass
DBHost localhost

問題與修復

  • 中文亂碼:Google 方案修改連線字元集,重新匯入解決。
  • Tags 全部遺失:工具僅支援 MT 3.1,MT 3.3 新增 Tags 欄位未轉換。

方案二:官方原生工具 mt-db2sql.cgi (推薦)

  1. 確認 mt-config.cgi 同時保留 Berkeley DB 與 MySQL 設定(雙配置共存)。
  2. 瀏覽器訪問 mt-db2sql.cgi,自動開始轉換。
  3. 輸出:Done copying data from Berkeley DB to your SQL database! All went well.
  4. 確認無誤後,註釋掉 Berkeley DB 配置,僅保留 MySQL。

優勢:官方維護、支援最新版本 Schema、完整保留 Tags/自訂欄位、Session 不遺失。

編碼最佳實踐

# mt-config.cgi 關鍵設定
PublishCharset utf-8
DBI::mysql:mysql_enable_utf8=1
# 或連線字串
mysql:dbname=mt;host=localhost;mysql_enable_utf8=1

遷移後驗證清單

項目驗證方式
文章總數SELECT COUNT(*) FROM mt_entry; 對比舊系統
分類/標籤SELECT * FROM mt_category; SELECT * FROM mt_tag;
留言/追蹤SELECT COUNT(*) FROM mt_comment; SELECT COUNT(*) FROM mt_tbping;
中文顯示前後台瀏覽標題、內容、留言無亂碼
效能基準EXPLAIN SELECT * FROM mt_entry WHERE blog_id=1 ORDER BY authored_on DESC LIMIT 20;

經驗總結

  • 優先使用官方遷移工具 (mt-db2sql.cgi),第三方工具版本滯後風險高。
  • 雙配置並行驗證,零停機切換。
  • 字元集全鏈路 UTF-8,避免二次轉碼。
  • 遷移後重建索引、更新統計資訊:ANALYZE TABLE mt_entry, mt_comment, mt_category;

從檔案型 DB 邁向關係型 DB,不僅解決效能瓶頸,更釋放資料價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved