首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -旧ibdata文件应该安全删除吗?

MySQL -旧ibdata文件应该安全删除吗?
EN

Database Administration用户
提问于 2014-11-11 08:09:44
回答 1查看 1.2K关注 0票数 2

在生产服务器上,我更改了"innodb_file_per_table=ON“,可以看到服务器上每个表的单独表空间文件。我对表进行了解析,因此对于每个分区都有一个单独的.ibd文件。

但是我可以看到以前的10 Gb大小的"ibdata1“文件。我有点好奇是否要删除它?

  1. MySQL是否仍然使用旧的共享表空间"ibdata“文件?
  2. 如果我删除共享表空间文件"ibdata1“,会对服务器产生任何影响吗?会引起什么问题吗?
EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-11-11 10:47:12

这是个很好的问题,也是一个很常见的问题。

当您将服务器配置更改为innodb_file_per_table = 1时,表仍然驻留在公共表空间上。您仍然必须使用ALTER TABLE ENGINE=InnoDB (或任何其他强制表空间重新创建的操作)重新创建这些操作。

一旦你这样做了,为什么MySQL还有一个巨大的ib_data1呢?事实是,InnoDB不能真正缩小(整理)其表空间文件。在大多数情况下,这不是一个大问题,因为每个文件中的空闲空间可以被其他数据、索引等页面使用,并且一旦您开始使用innodb_file_per_table,您总是可以单独地重新创建每个表空间,以便释放文件系统空间。

但是,常见的表空间是特殊的。即使它不包含任何表或索引信息,它也始终是强制性的,因为它存储数据字典、更改缓冲区等公共数据。因此,如果删除它,最终将导致mysql安装完全不可用。回答您的问题: 1)是的,它仍然在使用;2)如果删除它,您将无法再次重新启动mysql。但是,很明显,大多数ibdata1文件都是空的,只是很难移动页面地址。

下面是InnoDB架构的图片表示,您可以看到ibdata1的内容

那么,您必须永远使用这个10 do的文件吗?当然,这是有可能的,但是有一些方法可以消除它,这取决于服务器版本和您对可用性的需求:

  • 一种方法是,如果可用性不是问题,而且数据库很小,那么应该使用mysqldump或mydumper等工具将整个数据库转储到.sql或.txt中,停止服务器,删除所有文件(或至少删除所有无害数据库文件),再次启动mysql并重新加载数据,以确保innodb_file_per_table是打开的。很慢,但很容易。
  • 如果您不想经历如此长的过程,有一些方法可以完全在线完成,使用一个从-您只需要从一开始就设置它,然后切换节点。如果没有第二个框,则可以在同一台计算机上设置一个临时“从”(由于需要额外资源的问题)。
  • 如果使用MySQL >= 5.6,则可以使用导入TABLESPACE移动表空间。这将是一种以二进制格式执行快速备份、停止和擦除以及恢复的方法(比使用.sqls快得多)。一些像Percona XtraBackup这样的工具可能对此很有用。

这是一个非常常见的操作,我被问及并执行了一个MySQL DBA。希望这能有所帮助。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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