MySQL之修改數(shù)據(jù)表存儲引擎的三種方式
第一種方法
ALTER TABLE
將表從一個引擎修改為另一個引擎最簡單的辦法是使用ALTER TABLE語句,轉(zhuǎn)換表的存儲引擎會導(dǎo)致失去原引擎相關(guān)的所有特性。
例:
將mytable的引擎修改為InnoDB
mysql> ALTER TABLE mytable ENGINE = InnoDB;
上述方法適用任何的存儲引擎,但執(zhí)行時間較長。
MySQL會按行將數(shù)據(jù)從原表復(fù)制到一張新表中,在復(fù)制過程中會消耗系統(tǒng)所有的I/O能力,同時會對原表加上讀鎖。
如果在繁忙的表上執(zhí)行此操作需要特別小心。
第二種方法
導(dǎo)出和導(dǎo)入數(shù)據(jù)
使用mysqldump工具將數(shù)據(jù)導(dǎo)出到文件,然后修改文件中CREATE TABLE語句的存儲引擎選項和表名,同時注意mysqldump默認(rèn)會自動加上CREATE TABLE語句前加上DROPTABLE語句,若忽略此點可能會導(dǎo)致數(shù)據(jù)丟失。
第三種方法
創(chuàng)建與查詢(CREATE 和 SELECT)
此方法綜合了上述兩種方法的高效和安全,不需要導(dǎo)出整個表,而是先創(chuàng)建一個新的存儲引擎的表,然后利用 INSERT … SELECT語法導(dǎo)入數(shù)據(jù)。
mysql > CREATE TABLE innodb_table LIKE myisam_table; mysql > ALTER TABLE innodb_table ENGINE=InnoDB; mysql > INSERT INTO innodb_table SELECT * FROM myisam_table;
如果數(shù)據(jù)量大,可考慮分批處理,針對每一段數(shù)據(jù)執(zhí)行事務(wù)提交操作,以免大事務(wù)產(chǎn)生過多的undo。
假設(shè)有主鍵字段id,可重復(fù)運行以下語句將數(shù)據(jù)導(dǎo)入新表:
mysql > START TRANSACTION;
mysql > INSERT INTO innodb_table SELECT * FROM myisam_table
-> WHERE id BETWEEN x AND y;
mysql > COMMIT;以上操作完成后,新表是原表的一個全量復(fù)制,原表不受任何影響。如果有必要,可以在執(zhí)行中對原表加鎖,確保新表與原表的數(shù)據(jù)一致。
persona Toolkit提供了一個pt-online-schema-change的工具,可以簡單方便地執(zhí)行上述的過程,避免手工操作可能導(dǎo)致的失誤。
總結(jié)
好了,這些僅為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL 深分頁查詢優(yōu)化實踐與經(jīng)驗分享
文章總結(jié)了在企業(yè)級項目中優(yōu)化深分頁查詢的經(jīng)驗,包括執(zhí)行計劃分析、索引優(yōu)化和游標(biāo)分頁改寫,通過復(fù)合索引和游標(biāo)分頁,可以顯著提高查詢性能,感興趣的朋友跟隨小編一起看看吧2025-12-12
MySQL拼接字符串函數(shù)GROUP_CONCAT詳解
本文給大家詳細(xì)講解了MySQL的拼接字符串函數(shù)GROUP_CONCAT的幾種使用方法以及詳細(xì)示例,有需要的小伙伴可以參考下2020-02-02
mysql8.0.19基礎(chǔ)數(shù)據(jù)類型詳解
這篇文章主要介紹了mysql8.0.19基礎(chǔ)數(shù)據(jù)類型的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下2020-03-03
percona-toolkit對MySQL的復(fù)制和監(jiān)控類操作教程
這篇文章主要介紹了使用percona-toolkit對MySQL進行復(fù)制和監(jiān)控類操作的教程,percona-toolkit是一款強大的MySQL輔助軟件,需要的朋友可以參考下2015-11-11
關(guān)于MySql 10038錯誤的完美解決方法(三種)
本文給大家?guī)砣N有關(guān)mysql報10038錯誤的解決方法,每種方法都非常不錯,需要的朋友參考下2016-09-09

