MySQL MyISAM Engine 轉換成 InnoDB
如果對於 InnoDB 不了解的讀者們,可以參考作者之前寫的 MySQL 預設儲存引擎: InnoDB 介紹,最近開始把原本 MySQL 5.1 預設 MyISAM Table 全部轉換成 InnoDB,MySQL 5.5 版本開始預設的儲存引擎就是 InnoDB,InnoDB 現在也非常完整,也支援 Full Text (5.6.4 開始支援)。作者在轉換過程其實蠻順利的,步驟也不是很複雜,只要按底下步驟,就可以順利轉換。
備份原本資料庫
為了避免資料庫被玩壞,轉換之前一定要做好備份,也或者先在別台機器實驗,備份 MySQL MyISAM 非常簡單,如果你是安裝 Windows 版的 MySQL,透過像是 Appserv 或 xampp 懶人包,其實可以找到 MySQL 底下有個 data 目錄,將這目錄直接備份即可。如果是 Linux 也是一樣,備份 /var/lib/mysql,最後提供 MySQL 指令備份,透過 mysqldump 就可以了
轉換 MyISAM tabe to InnoDB
直接用 vim 或編輯器打開上面指令所備份的 .sql 檔案,將
改成
存檔後,再透過底下指令將資料存回到指定資料庫
完成後可以透過 phpMyAdmin 檢查看看是不是全部的都已經轉換成 InnoDB。
新增 FOREIGN KEY
最後設定 InooDB 好用的 FOREIGN KEY,FOREIGN KEY 可以綁定 parent table 跟 child table 多個 key 值,可以指定,當刪除 parent table 資料時,連帶 child table 也一起刪除或者是改成 Default value,轉換之前有一點非常要注意的是,FOREIGN KEY 的欄位格式需要一致,也就是如果 parent 欄位是 int(11) 那 child 的欄位就必須一樣,否則會無法設定 FOREIGN KEY,另外如果原本的資料庫非常大,也許會存在有些 child key 沒對應到 parent key,原因就是刪除了 parent row,但是忘記刪除相關 table 資料,所以務必寫程式將那些冗員刪除。
利用 ALTER 指令來增加 FOREIGN KEY
reference_option 可以是 CASCADE, SET NULL, RESTRICT, NO ACTION 或 SET DEFAULT。舉個例子,建立 users 跟 uses_groups 資料表,users 內有 id auto increament key,uses_groups 則是有 user_id 欄位來對應,所以透過底下可以設定該 FOREIGN KEY
經過上述步驟,相信大家都可以輕鬆轉換,如果遇到什麼問題,可以在此篇留言。或者可以參考 gslin 大神寫的 把大量的 MyISAM table 換成 InnoDB
Related View
- MySQL 預設儲存引擎: InnoDB 介紹 (3)
- PHP 將長期宣導程式設計師將 ext/mysql 改用 pdo_mysql 和 mysqli (0)
- 2011 OSDC Day 1 筆記 (3)
- [資料庫] 如何轉換 Mysql varchar type 到 int type (0)
- [網站] 好站連結 (七) Android, javascript, Css, PHP, Perl, FreeBSD, Linux (0)
- [FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9 (1)
- [MySQL] 必要修正一些預設值 (performance tunning) (0)
- [講義]屏科大 PHP & MySQL 基礎教學投影片 (16)
- 利用 PHP MySQL Quota-Tool 來限制 MySQL 存取空間大小 (3)
- [網站] 好站連結 (四) (0)