我的 MySQL 服务器包含两个 100+ GB 的大数据库。一个是用创建的innodb_file_per_table,一个不是。那个不是,已经被倾倒,准备重新加载。但是,ibdata1 文件仍然很大,我没有足够的可用空间。在这种情况下,通常的建议是转储和删除每个数据库,停止 MySQL,然后删除 ibdata1 和事务日志,然后重新加载数据库。
我的具体问题是:我可以离开innodb_file_per_table单独创建的数据库吗?或者当我删除 ibdata1 时它们会被破坏,即使它们的所有文件都是分开的?
我不能让这个数据库脱机转储并重新加载它。而且因为它已经正确地用每个表单独的文件制作了,所以感觉很没用。
我的具体问题是:我可以保留单独创建的数据库
innodb_file_per_table吗?或者,当我删除 ibdata1 时,即使它们的所有文件都是独立的,它们也会被破坏吗?
该整体ibdata1包含一些系统范围的数据。如果您尝试手动删除数据而不首先删除所有现有数据库,则可能会导致数据丢失。
(有很多方法可以从这种情况中恢复,但为什么要把自己置于这种境地呢?按照给你的指示转储所有数据库,重建 MySQL 安装,然后重新加载它们。这是安全的选择。)
我无法让这个数据库脱机来转储和重新加载它。
你必须负担得起。这只是一次中断 - 安排它并使其发生。
我们的常驻 MySQL 专家确认这是唯一(安全)的收缩方法ibdata1,我尊重他在这些问题上的专业知识。
(我还建议在安排停机时间之前阅读他的其他帖子(从该答案链接)。您也可以清除尽可能多的潜在问题,因为您将不得不采取停机时间... )