Mysql不同存儲(chǔ)引擎的表轉(zhuǎn)換方法
1、Alter table
直接修改表的存儲(chǔ)引擎,但是這樣會(huì)導(dǎo)致大量的系統(tǒng)開銷,Mysql為此要執(zhí)行一個(gè)就表向新表的逐行復(fù)制。在此期間,轉(zhuǎn)換操作可能會(huì)占用服務(wù)器的所有I/O處理能力。轉(zhuǎn)換表之后,原先引擎的特殊性質(zhì)都會(huì)丟失,無(wú)法復(fù)原。
2、轉(zhuǎn)儲(chǔ)和導(dǎo)入方法
用提供的mysqldump工具,可以將原有的表轉(zhuǎn)換為一個(gè)文本文件,然后修改該文件,將里面的create table語(yǔ)句的引擎選項(xiàng)修改為需要更改后的引擎。
3、創(chuàng)建一個(gè)新的表,并把舊表中的數(shù)據(jù)導(dǎo)入新的表
create table innodb_table like myisam_table ; alter table innodb_table engine=innodb; insert into innodb_table select * from myisam_table; drop myisam_table; |
以上方法適合數(shù)據(jù)量不大的情況,如果數(shù)據(jù)量很大的話,可能會(huì)產(chǎn)生大量的 undo log 日志,為了避免undo log過于龐大,可以逐段進(jìn)行復(fù)制;
start transaction ; insert into innodb_table select * from myisam_table where id between x and y; #逐次增大x和y的值 commit ; |
參考書籍:《高性能mysql》
聯(lián)系客服