{Blog 系統轉移} b2evolution migrate to wordpress import script.

從某一個應用系統 (或資料庫系統)要把資料轉移到另一個應用系統 (或資料庫系統),這個轉移的過程稱之為 “Migration” (相對地,若是同一系統的版本更新,則稱之為 Upgrade)。

上一個月,要從原來 b2evolution Blog 系統轉移 (migrate)到 wordpress 系統時,就如同當初我從 MT 轉移到 b2evolution 一樣,官方的系統均有提供 import (載入) 的 script 檔。 只是, MT 轉 b2evolution 時,當時因為資料結構比較單純,所以完全不用作任何修正,透過 import 工具程式一下子就轉好了;但是,這兩三年來, b2evolution 系統相當積極,版本更新極快,而每一次大版本的更新,必然會變動到 DB Schema,這使得 wordpress 所提供可以 import from b2evolution 的 script 檔,不可能不作修改就可以順利完成轉移作業。

wordpress 官方所提供對各大 Blog 系統的 import script 檔在此:Importing Content。 不過,我真的挺懶,想說若能找到無痛地可以從我現在 b2 1.10.3 版本 → wordpress 2.71 的網友加持修改版,那就更省事了。 結果呢,花了大半天的時間,是有找到啦,像這篇: Import From B2evolution(2.4.6) to WordPress (2.7)。 只是,要收費耶!! 含售後客服要價 50 USD。 其實啊,這價錢是算便宜的啦,當初我擔任某家公司的 Oracle DBA 時,幫企業客戶作轉檔的話,起碼是 10 數倍以上收費起跳的呢。

不過,想想還是乾脆又自己來動手 DIY 好了。 其實轉檔的原理相當簡單,就是把 Source Schema 對應 (mapping) 到 Target Schema 就對了。 b2evolution 有 31 個表格;wordpress 則只有 10 個 (非常欣賞它的結構簡潔)! 怎麼會差這麼多? 主因就是前者是被設計來服務多個部落格用戶的,而後者僅設定單一的部落格,所以前者儲存了非常多的統計數據,而這些,其實是不用轉移的。

轉移的核心會是什麼? 當然就是本文內容了。 本文就是包含 Post 內文 (content)與迴響 (comment),一篇內文會包含 0 到 多篇迴響,非常典型的 “Master-Detail” 表格結構,一般就是會有兩個表格個別儲存並以 Key (primary-key to foreign key)來關聯了。 所以只要找出含有 “_post” 字串的表格,大部份就是儲存 Post 內文的主表了。 再以此為中心,把一些如類別 (category)、帳號等額外資訊,給一一的加進來即可。

轉檔的寫法百百種,可以利用 stored-procedure、利用 C#/VB.NET、PHP、Perl 等機制來轉寫轉檔程序。 事實上,對資料結構與 SQL 語法精通的真正高手來說,只要寫個 SQL 陳述 (statement)甚至就可以轉移了。 嗯,我那個 partner Ringle 就是精通此道,他對資料庫的掌握度,我仍是沒有看到一個比他更強悍的。 可惜,他可不幫我作這種小事,而他收費可更是不便宜。 所以呢,我還是又繞回來,下載回來 wordpress 官方的 import script 程式,當然是利用 php 撰寫的,再以此作為轉移程式的 “骨架 (skeleton)”,然後慢慢地調整 SQL 陳述,修改表格與欄位、資料型態等。 呵呵,比想像得簡單,我採用漸進調整的方式作業,大概反覆轉移了有四、五次之多,至最終轉到我滿意正確的結果,大約也才耗上半天的時間而已。

閱讀全文 »

【筆記】MySQL 4.1.7 and PHP 4.3.x 搭配注意事項

系統環境:

  • MySQL 4.1.7 (官方正式推薦版本,支援 UTF-8 編碼)
  • PHP 4.3.9
  • phpMyAdmin 2.6.0-pl3

問題:

  • 當使用 phpmyadmin 2.6.0-p13 欲登入 MySQL 4.1.7 時,會出現如下錯誤訊息:
    #1251 – Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因:

  • 因為 MySQL 4.1 以上版本為了提高安全性,使用了新的密碼驗證機制。如此,MySQL 的 Client Library 需要 4.0 版本以上。但目前在 Client 端所使用的 PHP 版本若為 5.0 以下(如 4.3.9),其內建的 MySQL Library 大都為 3.23,並不支援新版的密碼驗證機制。

解決方案(以下擇其一):

  • 將 PHP 升級為 5.0版以上(但許多應用伺服器,包括諸多 Blog 平台,尚未支援 PHP5)
  • 切換 PHP 4.3.9的 MySQL extension 為 MySqlLi (但是,在 Windows 的平台如何切換?我不知道…)
  • 在 MySQL console 下,更新密碼形式改為 OLD_PASSWORD() (設回原來舊版的密碼驗證機制)。
    mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
          -> WHERE Host = 'some_host' AND User = 'some_user';
    mysql> FLUSH PRIVILEGES;
    

參考文件:MySQL Manual | A.2.3 Client does not support authentication protocol

【安裝】PHP5 於 Windows+IIS 安裝備忘錄

1. PHP5 不要安裝 installer 版本,因為不容易具擴充性。將 ZIP 檔解壓縮後放入如 C:\PHP5 目錄。

2. Control Panel -> System 設定環境變數。
 1). 於 “PATH” 變數內新增 C:\PHP5
 2). 新增 “PHPRC” 環境變數,其值設定為 C:\PHP5

3. PHP的主要設定檔為 php.ini。將 C:\PHP5\php.ini-recommended Rename 為 php.ini,設定並修改儲存之。

4. IIS 內設定 PHP 最好使用 ISAPI,非 CGI。效能較好。

5. 所有額外的擴充模組位於 \PHP5\ext 內。PHP5 已將 MySQL Client 模組抽離,所以需要 enable 該 extension。

6. 主要修改 php.ini 的地方:
 extension_dir = “C:/PHP5/ext”
 extension=php_mysql.dll
 extension=php_mysqli.dll

7. 可以利用 phpinfo() 來測試 php.ini 的設定是否正確。
 (可下載該檔案儲存為 phpinfo.php 並置於 c:\Inetpub\www_root\ 下)

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal