將 MySQL ISAM 表格從 Linux 轉移到 Windows

本篇是把我之前的舊作大致整理一下後貼上來。雖然不知道 MySQL 4.x 是否已經解決這樣的問題,而且我也改用 PostgreSQL 而不用 MySQL 很久了,但是我想或許有一天某個人需要做這類的事情而要找解決方法時,我能提供給他一個思考的方向。


MySQL 3.x 的版本中,若表格使用 ISAM 類型的話,資料庫會依平台而使用某些系統間互不相容的字元。這樣做的目的是為了加快在各個平台上的存取速度,但是相對地也就犧牲了平台之間的移植性。

先前我接的案子之中,有一間公司的平台是 Linux,因此在把資料庫轉到自己桌機上的 Windows 時出現了平台轉移的問題。對於容量較小的表格來說,直接存取還不至於有什麼太大的問題。但是對於檔案容量較大的表格,就常會出現完全存取不到的情況。已知的是,表格中還是存在著既有資料,但是資料庫系統就是無法讀取到那些內容。在找遍所有相關資料和多方詢問後一直都沒有解決,就這樣過了一個多月。

後來,在不斷嘗試之後,終於找出了解決的方法。

  1. 先把 Linux 平台上,MySQL 資料庫系統中的 your_database 資料夾找出來,複製到 $mysqlhome$/data
    • 假設表格名稱是 test,那麼把 your_database 資料夾中的 test 表格檔案先放到其他地方(共有三個檔案)
  2. 在 MySQL 中建立欄位和型態與 test 一樣的表格。表格類型需要指定為 ISAM,因為 MySQL 在 Windows 下預設的表格類型是 MYISAM
  3. test.ISD 檔案複製到 your_database 資料夾裡,用 isamchk -v -l -r ..\data\your_database\test
    • 執行一次仍然有問題,有時需要執行兩三次,應該就可以順利將表格檔案修復完成。記得 MySQL 需要用 mysql-max 方法來執行,除此之外都無法正常修復
  4. 一切搞定後,可以到 MySQL 裡將表格類型轉換成 MYISAM,這樣以後就不用再擔心平台轉移的問題了

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

9 − one =

返回頂端