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备份和导入,以及文件的备份和导入


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