之前公司的數據庫存儲引擎全部為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,這樣可以提高多用戶並發操作的性能。