如何将现有数据库的“innodb_file_per_table”参数从“OFF”更改为“1”?
Posted
技术标签:
【中文标题】如何将现有数据库的“innodb_file_per_table”参数从“OFF”更改为“1”?【英文标题】:How can I change the "innodb_file_per_table" parameter from "OFF" to "1" for an existing database? 【发布时间】:2017-09-20 04:30:58 【问题描述】:从 MyISAM 切换到 InnoBD 时,我使用了默认设置。阅读优化技巧后,我意识到每个表在单独的文件中更好。每种表格模式如何将表格从一个文件转移到一个单独的文件中?
【问题讨论】:
【参考方案1】:更多转化技巧:http://mysql.rjweb.org/doc.php/myisam2innodb
您可能必须这样做:
SET GLOBAL innodb_file_per_table = 1;
ALTER ...
我更喜欢使用大表 file_per_table,但在 ibdata1 中使用小表。
【讨论】:
您实际上不需要为此重新连接。对于同时具有 GLOBAL 和 SESSION 范围的变量来说,这是必要的——在这种情况下,SESSION 变量在连接时被初始化,并且更改 GLOBAL 的值不会影响当前会话——您需要重新连接或设置会话和全球。对仅具有全局范围的变量的更改通常会立即生效(innodb_file_per_table
就是其中之一)。然而,有一些变量的行为相当模糊,所以当不确定时,确实更容易安全。
@elenst - 谢谢。我可能已经被不一致的地方烧死了。【参考方案2】:
如果您使用 MariaDB 10.x,innodb_file_per_table=1
是那里的默认设置,因此只要您使用默认设置,您的新 InnoDB 表和从 MyISAM 转换为 InnoDB 的表将已经具有单独的表空间。
如果您使用的是 MariaDB 5.5,则默认为 innodb_file_per_table=0
。要开始使用单个表空间,请运行 SET GLOBAL innodb_file_per_table = 1;
。从那时起直到服务器重新启动,所有新创建和更改的 InnoDB 表都将使用此选项。要使选项永久化,请将其添加到 cnf 文件中。
要将现有的 InnoDB 表转换为单独的表空间,您可以运行
ALTER TABLE <tablename> ENGINE=InnoDB
或 ALTER TABLE <tablename> FORCE
。
【讨论】:
以上是关于如何将现有数据库的“innodb_file_per_table”参数从“OFF”更改为“1”?的主要内容,如果未能解决你的问题,请参考以下文章