mysql myisam转innodb的二种方法
时间:2014-11-23 14:35 来源:linux.it.net.cn 作者:IT
mysql中的myisam和innodb的区别:一个好比便利店,一个好比大型购物中心,他们是为了适应不同的场合而存在的。当流量比较小,可以用myisam;当流量大时,可能会把数据库中全部表或者部分表转换成innodb。
下面介绍2种切实可行的方法来完成这种表类型的转换。
一,用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,删除老表,重新建表,导入数据。
(责任编辑:IT)
mysql中的myisam和innodb的区别:一个好比便利店,一个好比大型购物中心,他们是为了适应不同的场合而存在的。当流量比较小,可以用myisam;当流量大时,可能会把数据库中全部表或者部分表转换成innodb。
下面介绍2种切实可行的方法来完成这种表类型的转换。
复制代码代码如下:
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 {} 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,删除老表,重新建表,导入数据。 (责任编辑:IT) |