標籤:建立 tab 表結構 轉換方法 sql utf8 /tmp star 直接
mysql myisam轉innodb的2種方法
mysql中的myisam和innodb有什麼區別。一個好比便利店,一個好比大型購物中心,他們是為了適應不同的場合而存在的。當流量比較小,我們可以用myisam,當流量大時,我們可能會把資料庫中的,全部表或者部分錶轉換成innodb。下面說2種切實可行的方法來完成這種轉換。
一,用alter table來實現。
- mysql> alter table merchant engine=innodb;
轉換方法很簡單。myisam在磁碟上的儲存有三個檔案,.MYD,.MYI,.frm檔案,轉換後這三個檔案會不會消失呢?innodb中共用資料表空間或者獨立資料表空間會不增加呢?
- [[email protected] test]# ls |grep merhcant|xargs -i du {}
- 12 merchant.frm
- 690 merchant.MYD
- 144 merchant.MYI
上面是轉換前的檔案大小,轉換後.MYD,.MYI消失了。而innodb的共用資料表空間增加8M.
- [[email protected] data]# ls |grep ibdata |xargs -i du -m {}
- 10 ibdata1 //轉換前的
-
- [[email protected] 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備份和匯入,以及檔案的備份和匯入
mysql myisam轉innodb的2種方法