如何将现有数据库的“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=InnoDBALTER TABLE <tablename> FORCE

【讨论】:

以上是关于如何将现有数据库的“innodb_file_per_table”参数从“OFF”更改为“1”?的主要内容,如果未能解决你的问题,请参考以下文章

如何将新数据保存到现有单元格?

如何将新数据附加到属性文件中的现有数据?

Mysql:如何将数据添加到存储在变量中的现有数据中?

如何将一列插入到两个现有列之间的数据集中?

如何将机器学习模型部署到现有网站

如何将EF核心搭建到现有数据库?