15.2.6.6. 使用Per-Table表空间

15.2.6.6. 使用Per-Table表空间

你可以存储每个InnoDB表和它的索引在它自己的文件在中,这个特征被称为“多表空间” ,因为实际上每个表有它自己的表空间。

对那些想把特定表格移到分离物理磁盘的用户,或者那些希望快速恢复单个表的备份而无须打断其余InnoDB表的使用的用户,使用多表空间会是有益的。

你可以往my.cnf的[mysqld]节添加下面行来允许多表空间:

[mysqld]
innodb_file_per_table

重启服务器之后,InnoDB存储每个新创建的表到表格所属于的数据库目录下它自己的文件tbl_name.ibd里。这类似于MyISAM存储引擎所做的,但MyISAM 把表分成数据文件tbl_name.MYD和索引文件tbl_name.MYI。对于InnoDB,数据和所以被一起存到.ibd文件。tbl_name.frm文件照旧依然被创建。

如果你从my.cnf文件删除innodb_file_per_table行,并重启服务器,InnoDB在共享的表空间文件里再次创建表。

innodb_file_per_table只影响表的创建。如果你用这个选项启动服务器,新表被用.ibd文件来创建,但是你仍旧能访问在共享表空间里的表。如果你删掉这个选项,新表在共享表空间内创建,但你仍旧可以访问任何用多表空间创建的表。

InnoDB总是需要共享标空间。.ibd文件对InnoDB不足以去运行,共享表空间包含熟悉的ibdata文件,InnoDB把内部数据词典和未作日志放在这个文件中。

注释:你不能像对MyISAM一样,在数据目录之间随意地移动.ibd文件。这是因为表定义被存在InnoDB共享表空间内,而且InnoDB必须保持事务ID和日志顺序号的一致性。

在一个给定的MySQL安装里,你可以用RENAME TABLE语句把.ibd文件和关联的表从一个数据库移到另一个数据库:

RENAME TABLE old_db_name.tbl_name TO new_db_name.tbl_name;

如果你有.ibd文件的一个干净的备份,你可以按如下操作从被起源的地方恢复它到MySQL安装中:

1.    发出这个ALTER TABLE语句:

2.      ALTER TABLE tbl_name DISCARD TABLESPACE;

警告这个语句删除当前.ibd文件。

3.    把备份的.ibd文件放回到恰当的数据库目录。

4.   发出这个ALTER TABLE语句:

5.      ALTER TABLE tbl_name IMPORT TABLESPACE;

在上下文中,一个.ibd文件干净的备份意为:

·         .ibd文件里没有尚未提交的事务做的修改。

·         .ibd文件里无未合并的插入混充条目。

·         净化已经从.ibd文件移除所有已标注删除的索引记录。

·         mysqld已经把.ibd文件的所有已修改页面从缓冲池刷新到文件。

你可以用下列方法生成一个.ibd文件的干净备份:

1.    停止所有来自mysqld服务器的活动,并提交所有事务。

2.    等待直至SHOW INNODB STATUS显示在数据库被已经没有激活的事务,并且InnoDB主线程的状态是Waiting for server activity。然后你就可以复制.ibd文件了。

生成一个.ibd文件的干净复制的另一个方法是使用商业的InnoDB热备份工具

1.    使用InnoDB热备份工具备份InnoDB安装。

2.    在备份上启动第二个mysqld服务器,让它清洁备份里的.ibd文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值