myisam轉innodb的方法(2)

一,用alter table來實現。

  1. mysql> alter table merchant type=innodb;  

  2. Query OK, 2806 rows affected, 1 warning (0.33 sec)  

  3. Records: 2806  Duplicates: 0  Warnings: 0  

轉換方法很簡單。myisam在磁盤上的儲存有三個文件,.MYD,.MYI,.frm文件,轉換後這三個文件會不會消失呢?innodb中共享表空間或者獨立表空間會不增加呢?

  1. [root@krlcgcms01 test]# ls |grep merhcant|xargs -i du {}  

  2. 12       merchant.frm  

  3. 690       merchant.MYD  

  4. 144       merchant.MYI  

上面是轉換前的文件大小,轉換後.MYD,.MYI消失了。而innodb的共享表空間增加8M.

  1. [root@krlcgcms01 data]# ls |grep ibdata |xargs -i du -m {}  

  2. 10      ibdata1   //轉換前的

  3. [root@krlcgcms01 data]# ls |grep ibdata |xargs -i du -m {}  

  4. 18      ibdata1   //轉換後的

mysql表在磁盤上的存儲方式的轉換,並不要額外的去轉換。這樣比較方便。innodb在這裏我設置的是共享表空間,這次轉換的表的大小不超過1M,但共享表空間自動增加了8M,所以共享表空間的大小,並不是按照表的大小來增加的,是有基數的。我們可以通過innodb_autoextend_increment來設置

二,導出數據,重新建表

1,導出表結構以及數據,刪除老表,重新建表

  1. //方法1,我們可以把把創建這個表的sql拷貝出來,把ENGINE=MyISAM換成,ENGINE=INNODB

  2. mysql> show create table merchant\G;  

  3. *************************** 1. row ***************************  

  4. Table: merchant  

  5. Create Table: CREATE TABLE `merchant` (  

  6. `btid` int(5) unsigned zerofill NOT NULL auto_increment,  

  7. `btname` varchar(100) NOT NULL,  

  8. `btnote` text,  

  9. PRIMARY KEY  (`btid`),  

  10. UNIQUE KEY `btname` (`btname`)  

  11. ) ENGINE=MyISAM DEFAULT CHARSET=utf8  

  12. 1 row in set (0.00 sec)  

  13. //方法2,直接導出表結構,在文件裏面替換一個myisam

  14. mysqldump -udba -p -d test merchant >/tmp/test/mytest/merchant.sql;  

2,導出數據

  1. mysqldump -udba -p --no-create-info test merchant >/tmp/test/mytest/merchant_data.sql;  

3,刪除老表,重新建表,導入數據,這個就不說了linux 簡單的mysql備份和導入,以及文件的備份和導入


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章