一,用alter table來實現。
mysql> alter table merchant type=innodb;
Query OK, 2806 rows affected, 1 warning (0.33 sec)
Records: 2806 Duplicates: 0 Warnings: 0
轉換方法很簡單。myisam在磁盤上的儲存有三個文件,.MYD,.MYI,.frm文件,轉換後這三個文件會不會消失呢?innodb中共享表空間或者獨立表空間會不增加呢?
[root@krlcgcms01 test]# ls |grep merhcant|xargs -i du {}
12 merchant.frm
690 merchant.MYD
144 merchant.MYI
上面是轉換前的文件大小,轉換後.MYD,.MYI消失了。而innodb的共享表空間增加8M.
[root@krlcgcms01 data]# ls |grep ibdata |xargs -i du -m {}
10 ibdata1 //轉換前的
[root@krlcgcms01 data]# ls |grep ibdata |xargs -i du -m {}
18 ibdata1 //轉換後的
mysql表在磁盤上的存儲方式的轉換,並不要額外的去轉換。這樣比較方便。innodb在這裏我設置的是共享表空間,這次轉換的表的大小不超過1M,但共享表空間自動增加了8M,所以共享表空間的大小,並不是按照表的大小來增加的,是有基數的。我們可以通過innodb_autoextend_increment來設置
二,導出數據,重新建表
1,導出表結構以及數據,刪除老表,重新建表
//方法1,我們可以把把創建這個表的sql拷貝出來,把ENGINE=MyISAM換成,ENGINE=INNODB
mysql> show create table merchant\G;
*************************** 1. row ***************************
Table: merchant
Create Table: CREATE TABLE `merchant` (
`btid` int(5) unsigned zerofill NOT NULL auto_increment,
`btname` varchar(100) NOT NULL,
`btnote` text,
PRIMARY KEY (`btid`),
UNIQUE KEY `btname` (`btname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
//方法2,直接導出表結構,在文件裏面替換一個myisam
mysqldump -udba -p -d test merchant >/tmp/test/mytest/merchant.sql;
2,導出數據
mysqldump -udba -p --no-create-info test merchant >/tmp/test/mytest/merchant_data.sql;
3,刪除老表,重新建表,導入數據,這個就不說了,linux 簡單的mysql備份和導入,以及文件的備份和導入