Tuesday, February 12, 2008

幫Mediawiki換資料庫

因為Mediawiki不是很愛PostgreSQL,趁著這次要換機器,就順便把後端資料庫系統也換成MySQL吧。難處祇有一個;把PostgreSQL dump出來的資料import進MySQL裡。pg_dump然後mysqlimport的下場就是死,大抵上換資料庫都沒這麼簡單的,總得手動調一下。

我先跑一次Mediawiki的安裝程式讓它幫我把MySQL的database schema建起來,其實不用特別動到安裝程式,祇要把Mediawiki抓下來,跑建schema那支php就好。

因為Mediawiki建MySQL與PostgreSQL的table schema不太一樣,所以pg_dump時我下了--column-inserts這個參數,這樣dump出來的INSERT INTO語法會包含column,MySQL在匯入時就不會把資料放錯欄位。(感謝f0rth指導)

其次是有些table的column數或initial value不同,在MySQL匯入時就會出現錯誤訊息,這滿簡單解決,根據錯誤訊息刪除PogreSQL dump出來的資料中多出的column,或是更改MySQL裡面column的initial value setting就好。

再來就是時間格式,在PostgreSQL的timestamp與MySQL timestamp格式不同,如果不修改的話,就算資料全匯入了,時間也會亂掉。這個也不難,寫個小script在匯入前把有timestamp的entry都改成MySQL格式就好。PostgreSQL的格式是YYYY:MM:DD HH:MM:SS+Timezone,MySQL則是YYYYMMDDHHMMSS,很好代換的。

將資料都匯入MySQL後,把原機器上安裝mediawiki目錄下的檔案也搬過來,再執行一次Mediawiki安裝,然後把原機器上的LocalSettings.php(扣除資料庫設定的部份)複製到新機器上的LocalSettings.php,這樣就行了。

參考資料:
Moving a wiki
Mediawiki database layout

No comments: