mysql中的myisam和innodb有什么区别,在这儿就不哆嗦了。一个好比便利店,一个好比大型购物中心,他们是为了适应不同的场合而存在的。当流量比较小,我们可以用myisam,当流量大时,我们可能会把数据库中的,全部表或者部分表转换成innodb。下面说2种切实可行的方法来完成这种转换。
一,用alter table来实现。
- mysql>altertablemerchanttype=innodb;
- QueryOK,2806rowsaffected,1warning(0.33sec)
- Records:2806Duplicates:0Warnings:0
转换方法很简单。myisam在磁盘上的储存有三个文件,.MYD,.MYI,.frm文件,转换后这三个文件会不会消失呢?innodb中共享表空间或者独立表空间会不增加呢?
- [root@krlcgcms01test]#ls|grepmerhcant|xargs-idu{}
- 12merchant.frm
- 690merchant.MYD
- 144merchant.MYI
上面是转换前的文件大小,转换后.MYD,.MYI消失了。而innodb的共享表空间增加8M.
- [root@krlcgcms01data]#ls|grepibdata|xargs-idu-m{}
- 10ibdata1//转换前的
- [root@krlcgcms01data]#ls|grepibdata|xargs-idu-m{}
- 18ibdata1//转换后的
mysql表在磁盘上的存储方式的转换,并不要额外的去转换。这样比较方便。innodb在这里我设置的是共享表空间,这次转换的表的大小不超过1M,但共享表空间自动增加了8M,所以共享表空间的大小,并不是按照表的大小来增加的,是有基数的。我们可以通过innodb_autoextend_increment来设置
二,导出数据,重新建表
1,导出表结构以及数据,删除老表,重新建表
- //方法1,我们可以把把创建这个表的sql拷贝出来,把ENGINE=MyISAM换成,ENGINE=INNODB
- mysql>showcreatetablemerchant\G;
- ***************************1.row***************************
- Table:merchant
- CreateTable:CREATETABLE`merchant`(
- `btid`int(5)unsignedzerofillNOTNULLauto_increment,
- `btname`varchar(100)NOTNULL,
- `btnote`text,
- PRIMARYKEY(`btid`),
- UNIQUEKEY`btname`(`btname`)
- )ENGINE=MyISAMDEFAULTCHARSET=utf8
- 1rowinset(0.00sec)
- //方法2,直接导出表结构,在文件里面替换一个myisam
- mysqldump-udba-p-dtestmerchant>/tmp/test/mytest/merchant.sql;
2,导出数据
- mysqldump-udba-p--no-create-infotestmerchant>/tmp/test/mytest/merchant_data.sql;
3,删除老表,重新建表,导入数据,这个就不说了,linux 简单的mysql备份和导入,以及文件的备份和导入
未经允许不得转载:OZ分享-吉家大宝官方博客 » mysql myisam转innodb的2种方法