Chinaunix首页 | 论坛 | 博客
  • 博客访问: 797864
  • 博文数量: 50
  • 博客积分: 757
  • 博客等级: 上士
  • 技术积分: 1913
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-29 14:29
个人简介

DBA

文章分类

全部博文(50)

文章存档

2015年(3)

2014年(2)

2013年(14)

2012年(19)

2011年(12)

分类: Mysql/postgreSQL

2012-01-30 20:30:04

版本5.5
     默认情况下,innodb表使用共享表空间存储数据和索引。mysql同时提供了另一种选择,将每个表的数据和索引放在单独的文件中,这就是“独占表空间”或者说“多表空间”,设置了之后,每个表有单独的表空间。
一、独占表空间的优点:
     ①、可以在不影响其他innodb表的情况下对单个表进行备份和恢复。
     ②、可以将特定的表放在特定的磁盘上,利于优化IO和备份。
     ③、使用compressed_row_format行记录模式压缩数据。
     ④、truncate table会回收表空间,这是对比共享表空间很大的优势。
     ⑤、监控表的大小,不用进入mysql查看table status,只需要在数据目录中查看文件大小就可以了。
二、开启/关闭独占表空间
     在my.cnf中设置
  1. [mysqld]
  2. innodb_file_per_table
     独立表空间打开之后,innodb会为新建的表生成单独的tbl_name.ibd文件,文件在各自的database目录下。区别于MyISAM表的特点——MYSIAM表会产生单独的tbl_name.MYD 和 tbl_name.MYI 文件分别存放数据和索引——INNODB将数据和索引存在一个.ibd文件中,同时照常产生 tbl_name.frm(表结构)文件。

     如果关闭innodb_file_per_table,INNODB又会将新表的数据和索引放在共享的文件中。

     可以将数据从共享表空间转移到独占表空间或者反过来,而不用管my.cnf中的配置,用下面的方法实现:
  1. -- Move table from system tablespace to its own tablespace.
  2.     SET GLOBAL innodb_file_per_table=1;
  3.     ALTER TABLE table_name ENGINE=InnoDB;
  4.     -- Move table from its own tablespace to system tablespace.
  5.     SET GLOBAL innodb_file_per_table=0;
  6.     ALTER TABLE table_name ENGINE=InnoDB;
   转移表:
      你可以像移动MYSIAM文件一样将.ibd文件在数据库目录之间随意移动,因为表定义记录在共享表空间中,包括数据库的名字。不同的数据库之间,保存在各自表空间中的事物ID和日志序列号也都是不一样的。使用RENAME更改表定义:
     
  1. RENAME TABLE db1.tbl_name TO db2.tbl_name;
   PS:共享表空间始终是要使用的,因为里面保存了表的元数据和undo日志。只有.ibd文件innodb是无法工作的。将大表从共享表空间移出后,共享 表空间不会回收磁盘,但是可以被新表使用。这种情况下如果磁盘不足,那么最好打开独立表空间,使用mysqldump重建实例。
    表空间回收:
       独占表空间在删除数据的时候也是不会回收磁盘空间的。使用optimize table 或者alter table table_name engine=innodb可以回收磁盘空间,因为会建立新文件,删除旧文件,数据就紧凑了。
  


阅读(2542) | 评论(0) | 转发(0) |
0

上一篇:vrrpd

下一篇:vrrpd测试使用

给主人留下些什么吧!~~