之前公司的資料庫儲存引擎全部為MyISAM,資料量和訪問量都不是很大,所以一直都沒什麼問題。但是最近出現了MySQL資料表經常被鎖的情況,直接導致了使用者串連網站時逾時而返回502,於是決定把儲存引擎轉為Innodb的,以解決MyISAM的表鎖問題。下面將操作步驟記錄一下。
核心代碼
修改表的儲存引擎:
| 代碼如下 |
複製代碼 |
•alter table tablename type=InnoDB |
例
1、匯出centos資料庫的表結構
| 代碼如下 |
複製代碼 |
1.mysqldump -d -uxxx -p centos > centos_table.sql |
其中-d參數表示不匯出資料,只匯出表結構
2、替換centos_table.sql裡的MyISAM為INNODB
| 代碼如下 |
複製代碼 |
1.sed -i 's/MyISAM/INNODB/g' centos_table.sql |
3、建立資料庫centos_new,並匯入表結構
| 代碼如下 |
複製代碼 |
1.mysql > create database centos_new; 2.mysql -uroot -p centos_new < centos_table.sql |
可以通過show table status來檢查表引擎是否為INNODB。
4、匯出centos的資料
| 代碼如下 |
複製代碼 |
1.mysqldump -t -uroot -p centos > centos_data.sql |
其中-t參數表示只導資料,不導表結構
5、匯入資料到centos_new
| 代碼如下 |
複製代碼 |
1.mysql -uroot -p centos_new < centos_data.sql |
最後如果你想把centos_new資料庫名更改為centos
MyISAM和InnoDB儲存引擎的比較
主要區別:
•MyISAM是非事務安全型的,而InnoDB是事務安全型的。
•MyISAM鎖的粒度是表級,而InnoDB支援行級鎖定。
•MyISAM支援全文類型索引,而InnoDB不支援全文索引。
•MyISAM相對簡單,所以在效率上要優於InnoDB,小型應用可以考慮使用MyISAM。
•MyISAM表是儲存成檔案的形式,在跨平台的資料轉移中使用MyISAM儲存會省去不少的麻煩。
•InnoDB表比MyISAM表更安全,可以在保證資料不會丟失的情況下,切換非事務表到事務表(alter table tablename type=innodb)。
應用情境:
•MyISAM管理非事務表。它提供高速儲存和檢索,以及全文檢索搜尋能力。如果應用中需要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。
•InnoDB用於交易處理應用程式,具有眾多特性,包括ACID事務支援。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多使用者並行作業的效能。