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)文章
Windows下MySQL日志基本的查看以及導(dǎo)入導(dǎo)出用法教程
這篇文章主要介紹了Windows下MySQL日志基本的查看以及導(dǎo)入導(dǎo)出用法教程,需要的朋友可以參考下2015-11-11MySQL 自定義函數(shù)CREATE FUNCTION示例
本節(jié)主要介紹了MySQL 自定義函數(shù)CREATE FUNCTION,下面是示例代碼,需要的朋友可以參考下2014-07-07show engine innodb status顯示信息不全如何解決
執(zhí)行 show engine innodb status\G 時,顯示的信息不全,DEADLOCK相關(guān)信息太多,后面的都沒了2012-11-11mysql mysqldump數(shù)據(jù)備份和增量備份
本篇文章主要講如何使用shell實現(xiàn)mysql全量,增量備份,還可以按時間備份。2013-10-10如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)
本篇文章是對如何獲取SqlServer2005表結(jié)構(gòu)(字段,主鍵,外鍵,遞增,描述)的方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06MySQL 處理插入過程中的主鍵唯一鍵重復(fù)值的解決方法
本篇文章主要介紹在插入數(shù)據(jù)到表中遇到鍵重復(fù)避免插入重復(fù)值的處理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE的相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧2016-04-04