小升級

昨天花了點時間,把 Blogspring 用的資料庫從 MySQL 4.0.x 升級到了 5.0.19。

會想要升級最主要的原因是之前的 MySQL 4.0.x 版是設定在 Big5 字元模式下運作的。如果要備份資料的話,使用 mysqldump 來匯出資料不會遇上什麼問題,但是在要重新匯入備份資料時,便會遇上跳脫字元而中斷。於是便狠下心來升級 MySQL 順便轉換字元模式到沒有跳脫字元問題的 UTF-8。

在這裡記錄一下我的小小心得…

在升級之前,有作了一點功課,發現不少人在升級 MySQL 4.0.x 時多少都碰到了一些問題,也各有解決知道。像是 O3noBlog 的 『避開編碼問題升級MySQL 4.1』,以及竹貓星球的 [問題] MySQL 4.0升級至4.1,有關utf8資料的問題[問題] BIG5(ANSI or utf8)資料庫轉換成 UTF-8 的問題。在心裡大概有個底之後,就開始了我的升級之路…

不過,或許是因為 Lifetype 本身在預設狀態就是以 UTF-8 運行的關係。在用 Notepad2 觀看我從舊版 MySQL 的時候,絕大多數文章內容以及迴響就已經是 UTF-8 編碼了。所以我就省略了用 iconv 來轉碼的動作。

接著便是移除舊版的 MySQL 並且直接安裝 MySQL.com 上提供的 MySQL 5.0.19 安裝版。不過在安裝完之後,還是碰上了兩個問題。

第一、換上新版的 MySQL 之後,無法使用 phpmyadmin ,並出現 "Client does not support authentication protocol requested by server; consider upgrading MySQL client" 的錯誤訊息。

這是因為 MySQL 在 4.1 版之後密碼的編碼方式有改變所造成的。解決辦法在 MySQL 的 Reference Manual 中有提到兩種:(1)升級我的 MySQL Client (也就是從 php4 升級到 php5),(2) 或是把 root 的密碼改用 old_password() 這個函式重新編碼。我是採用後者。但是,如果以後每新增一個使用者就要用 old_password() 來重新編碼實在有點麻煩。因此我修改了 MySQL 的設定檔 my.ini ,並在[mysqld] 這行之後,另外加上一行 old-passwords
,強迫新版的 MySQL 以舊的密碼編碼模式來運行。

第二、在以 UTF-8 模式新增了一個資料庫後,開始匯入原本 Blog 的資料時,仍然會碰上一些不正常的跳脫字元而中斷。

因此,我只好用 notepad2 把出問題的 SQL 檔案打開來檢查。發現出問題的行數,集中在 bayesian_tokens 以及 blog_statistics 這兩個資料表,也就是處理垃圾留言以及記錄登入訪客資料的地方。本來我是採取逐行修正的動作,但是有錯誤字元的行數實在太多了(至少應該有上百行吧… ><)而且這兩個資料表對於整個 Blog 運作
其實沒有太大影響。所以只好一鼓作氣把這兩個資料表清空。清空以後,整個資料庫大小從 8 MB 減肥到了 1.5 MB,而資料庫匯入的過程也順利許多…

在完整匯入之後,接下來就以忐忑不安的心情打開了 BlogSpring 首頁。幸好一切順利運作。完全沒有遇上亂碼或是出現一堆問號字的情況。
升級工作就此大功告成…

雖然外觀一樣,但是 Blogspring 再也不是本來的 Blogspring 了… :)

Leave a Reply