我正走进一个使用 MySQL 和 Innodb 作为存储引擎的环境。我想启用 innodb_file_per_table 来提高性能。考虑到所有数据库/表当前都存储在 ibdata1/default ibdata 文件中,innodb_file_per_table 选项是否只影响我设置此指令后创建的新表?
使用现有数据库并将每个表拆分为它自己的 ibd 文件的最佳方法是什么?我是否必须转储/恢复所有表才能实现这一点?
我正走进一个使用 MySQL 和 Innodb 作为存储引擎的环境。我想启用 innodb_file_per_table 来提高性能。考虑到所有数据库/表当前都存储在 ibdata1/default ibdata 文件中,innodb_file_per_table 选项是否只影响我设置此指令后创建的新表?
使用现有数据库并将每个表拆分为它自己的 ibd 文件的最佳方法是什么?我是否必须转储/恢复所有表才能实现这一点?
我同意@faker 的回答和评论(他的回答+1),但还有一件重要的事情要做:
在关闭 mysql 之前,您需要运行
SET GLOBAL innodb_fast_shutdown = 0;
. 为什么?这将完全清除 ib_logfile0 和 ib_logfile1 中遗留的所有事务信息。关闭时间更长,但在未提交的事务数据方面没有任何逗留。因此,执行此过程不会丢失任何数据。
这是我在 StackOverflow 中的帖子:如何操作:https ://stackoverflow.com/a/4056261/491757
http://dev.mysql.com/doc/refman/5.0/en/innodb-multiple-tablespaces.html:
是的,需要转储和恢复才能将现有表移动到它们自己的文件中。