![]() |
|
|||||||
![]() |
|
|
Thread Tools | Display Modes |
|
|
|
#1
IP: 49.87.50.253
|
|||
|
|||
|
如果你从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文件。 |
![]() |
| Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
| Thread Tools | |
| Display Modes | |
|
|