首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向innodb_file_per_table的30+数据库转换

向innodb_file_per_table的30+数据库转换
EN

Database Administration用户
提问于 2020-12-17 00:39:07
回答 2查看 111关注 0票数 0

目前,我有一个带有MySQL的innodb_file_per_table = 0服务器

基于许多因素,我将其改为innodb_file_per_table = 1似乎是有意义的

我明白要让这一切都成功我需要

  1. 使用mysqldump将所有数据库导出到各个文件中。
  2. 停工mysql
  3. 更改innodb_file_per_table设置
  4. 重新启动mysql
  5. 导入每个数据库

问题是,我可以这样做吗?

日#1

  1. 停工mysql
  2. 更改innodb_file_per_table设置
  3. 重新启动mysql
  4. 导出一些数据库
  5. 将这些数据库导入mysql

日#2

  1. 导出一些数据库
  2. 将这些数据库导入mysql

直到我导出了一个重新导入的所有数据库?

我假设在过渡期间,一些数据库将继续使用ibdata1文件,而导出和重新导入的数据库将使用它们自己的数据存储。混合数据存储会导致问题吗?还是我可以分阶段进行转换?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2020-12-17 19:54:33

对不起,我没有关于何时以不同的方式设置innodb_file_per_table的参考。以下是一些建议:

  • 注意:innodb_file_per_table的值仅适用于后续的CREATE TABLEs或表重建。
  • 也许开启它的主要原因是:当您有一个可能是ALTERed的“大”表,或者您可能做了大量的删除等操作时,最好使用file_per_table构建表。这允许操作替换只包含一个表的.ibd文件。
  • 因此,如果该操作大大缩小了表,则释放出来的额外空间将返回给操作系统。也就是说,将空闲空间返回到操作系统的唯一简单方法是打开file_per_table并执行一些重新构建表的操作。
  • 对于将保持较小的“小”表,file_per_table = OFF略好一些。这是因为为许多表共享一个文件描述符(用于ibdata1)。
  • 要更改表的file_per_table,需要(1)设置标志,(2)重新构建表(例如,简单地说是ALTER TABLE t ENGINE=InnoDB;,它可能需要FORCE)。在此之后,考虑更改设置。
  • 在磁盘空间上运行紧张时,可以通过在ibdata1 (可能有大量空闲空间)和单独的.ibd文件之间移动选定的表来玩游戏。
  • 将文件从ibdata1中移出会留下一堆空闲空间。这个空间最终可能会被INSERTs和ibdata1表上的其他操作所使用。
  • 倾销和完整性不受ibdata1对.ibd的影响。
  • 大多数服务器不应该担心设置。
  • 从本质上说,相关专题: OPTIMIZE TABLE对于InnoDB表来说是不必要的。
票数 1
EN

Database Administration用户

发布于 2020-12-17 01:12:12

老实说,除非你有一个具体的问题要解决,否则我不会费心的。

可以通过以下方式做得更简单:

  1. 关机
  2. 更改设置innodb_file_per_table =1
  3. 开始
  4. 每个表的ALTER TABLE xxx FORCE
票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/281698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档