自從之前 2008/11/10 – 手賤加腦殘‧網站被自己給弄掛 之後,雖然對於網站的升級更加謹慎(我總算是記得隨時備份了),但是,老子就是不信邪,以我以前成功的升級我自己的每個網站與每個系統更新的經驗來說,上一次只是自己不小心忘了留下後路,並非本身的技術問題,所以我決定再找一天有空時,再把網站給玩一次。
昨天不知道怎麼的,爬樓梯也可以不小心把腳扭到,剛開始實在痛得要命,只好先在家休息,在休息的漫長時間裡,我手賤的本性又開始蠢蠢欲動了,反正閒著也是閒著,我就打算再次嘗試再把我的阿修羅爬蟲世界作一次重大更新 – 這次我不只升級某個系統,我打算將整個網站的編碼從Big5大五碼轉換為UTF-8萬國碼;然而這個工作,我早在去年底就打算進行了,只是因為工程浩大我又沒有時間,一直不敢開始進行。
這天,老子就完全不喝酒,用我全部的時間跟我的網站拼了。
1.準備資料庫數據編碼轉換
資料庫是一個網站的全部核心,不管是會員資料、新聞文章、討論區裡所有討論串等等可用純文字型態儲存的類型,全部都是存在資料庫裡的,所以這裡是一個網站要轉換系統過程中,最最重要的地方,這裡在轉換之前如果不先行備份,一出錯的話管你網站經營了幾個月來是幾十年,整個網站就完全毀了,所以這第一步最重要的,我一定是列為優先考量的。
為了進行數據轉換,我先做了很多準備,除了在Google搜尋一下有沒有人進行這工作而發生的任何可能狀況,也比對了我的伺服器所有軟體版本是否相容,直到我確定前置作業都好了之後,我開始盤算該怎麼進行數據的轉換 – 先備份之後,進行Big5=>UTF-8編碼的轉換,我相信對於進行這方面有經驗的朋友就會理解,這是一項必須多麼小心的工作,過程中絕不允許任何差錯。最危險的就是轉換時遇到語系編碼問題或字元衝突而出錯或強制停止,那就比較傷腦筋了,但是這種狀況我敢說,絕對會發生,端看有沒有心理準備與可不可以去修改而繼續進行罷了。
我的爬蟲世界資料庫容量目前已達八十幾MB,這還只是Big5編碼時的容量,如果轉成UTF-8,容量爆增三分之一,預設是突破百MB的了‧所以要轉換這種容量大的資料庫,必須使用分卷備份/轉換來處理,而這項工作,phpmyadmin是無法勝任的,它沒有這種功能,我必須找找看有沒有好用的分卷備份工具來幫助我;目前較為先進的論壇或網站系統都會內建分卷備份功能,甚至還可以排定一個時間定期進行,像我這種2004年左右的架構,是不會有這麼方便的功能的。
我找到幾套、也試用了幾套所謂功能強大便利的備份系統,唯一值得我驚艷的,就是帝國備份王(Empirebak)2008,這是中國大陸所開發的一套軟體,使用了這套我非常驚訝,先前數十次的網站升級經驗,沒有一次因為這次這麼順手過,它可是個大功臣,所以在此強力推薦使用。
2.XOOPS Big5=>UTF-8 編碼轉換過程
於是開始累人又傷神的工作,首先,使用備份系統將要備份的資料庫全部備份至指定資料夾之後,這時編碼還是Big5,然後從FTP端把剛才備份的資料全部下載回自己電腦,然後在本地端直接作編碼的轉換,在此我是使用Convertz來轉換,我想很多朋友對這套軟體都不陌生,不僅不用安裝,還好用到一個爆炸啊!!作者是一個香港人,我用這套軟體五年有了,真的很好用,用過的人就知道,沒用過的我強力推薦。
轉換完之後,重新上傳回去伺服器,近百MB要上傳不是幾分鐘就可以完成的事情,我抽根菸,看看電影…..等到完全上傳好之後進行下一步 – 把轉換好的資料庫再塞回原本資料庫。
當然這也是一件很恐怖的事情,所以我先把這份數據先恢復到我新建的一個空資料庫,然後將我網站的設定檔資料庫連接部分改為指向這一個新資料庫先做測試…..果不其然,在數據恢復過程中好幾次因為字元溢出的問題出現了錯誤而被迫停止,我開始手動修補出問題的資料條,慢慢的再塞回去,然後漸漸的,所有資料庫被我用UTF-8近乎99.9%的比例,完整的重建了回來。
3.更改網站系統本身語系編碼
最重要的資料庫回來了之後,因為本身使用的系統是XOOPS,支援多語系與編碼,所以要把整個網站系統轉為UTF-8並非難事,只要上傳一份UTF-8中文語系並設定就好了,接下來,我越做越順手,每個模組的語系編碼,逐一的被我修改成功,一直到最後,剩下了討論區的問題 – 這是我所有網站系統中最重要也最大的問題。
我的XOOPS使用的是IPB1.4模組(IPBM 1.4I For XOOPS),可以說,我所有網站升級與編碼的轉換,都是為了討論區,因為這也是整個網站的核心 – 我的會員系統全部都集中在這裡…..就剩下這裡了…..這個時候我已經開始在暗爽了,非常爽,因為這裡一旦順利完成之後,我的網站將來開始整個就都不一樣了,可以邁向新紀元了。
媽咧個蛋蛋……….事實結果…..果然不是笨蛋可以想像的這樣……….囧
IPBM 1.4 語言檔與樣板部分都可以成功轉換,問題出在於程式核心,它除了原本與言檔之外,某些php檔案內也參雜著中文,這些都要一併轉換,但總是遇到字元溢出而導致得畫面一片空白,而且論壇無法自動辨識編碼,一直出現亂碼,每換一個頁面都要按右鍵=>編碼=>UTF-8…..幹…..搞了那麼久的時間,有轉換跟沒轉換還不都同樣意思…..今天老子做白工了。
不過幸好前置作業我作的很完善,雖然先前花了我五六個小時,但是我恢復卻用不到一個小時,這等於之前其實有大部分的時間,我是用來備份、爬文、研究與學習的。
至少我還可以把它完全再恢復回來,雖然說好像完全沒改變到什麼,但我學到了很多經驗,下次再作充分的準備,我相信就可以一次的順利轉換完成,甚至我可以把這個原本的XOOPS系統,完全的把數據轉到另一個系統(例如我改用了其他CMS)。
4.結論
這次的升級過程,到底是成功還是失敗??
對我來說,也許結果是失敗的,但至少我認為在過程中,是成功的,因為流程很順手,很多問題幾乎是跟我預想的是一樣的,甚至結果也是我所預期,所以說,這次並不能說是失敗,而是我必須該有更充足的準備與學習。我的心情可以說很不錯,畢竟我已經把整個網站玩到翻過來轉過去了,而至少我覺得我可以繼續進行,只是可能要考慮取捨某些我認為不甚重要的資料來完成這個作業,但是我知道對我來說,它之後是沒有瓶頸的。
在我寫這篇網誌的時候,事實上我正在上傳新的系統檔案(IPBM已經還原到IPB1.3原版成功,準備升級到IPB2),等著試驗繼續之後的升級。
XOOPS 的 IPBM 1.4是 免費的,而IPB2.x For XOOPS套件是要收錢的,理所當然,我本來就打算付錢購買IPB升級套件,但前提之下,我得先把目前的舊論壇先處理,才來進行後續升級。
結果機車的事情偏偏發生了,IPBM支援站兩個禮拜前突然間開始完全不支援IPB2.x For XOOPS,我就算想買那套件也買不到了,這個結果,逼得我不得不重新考慮我論壇到底該轉換為哪個系統。
雖然我現在打算進行IPBM 1.4=>IPB 1.3原版=>IPB 2.x=>Discuz!,但這次之後有甚麼結果,我可是完全無法想像;雖然我六年前從Discuz!的前身CDB看他們一路走來至今如此(我可是官方網站第902個會員,夠老吧?),但因為目前中港台的中文爬蟲網站可說是九成八都是用Discuz!系統,這是毫無新意,讓我產生不想跟風的心態,但是如果我系統只能轉換如此,以我目前的能力來說,我想我可能也別無選擇。
但就算我別無選擇的得升級成Discuz!,我也敢保證,至少我的網站依然是最特別的,資料最完整、功能最強大、維護最周全……….呃……….會員線上人數最少………………..囧