我的MySQL服务器包含两个100 + GB的大数据库。 一个是用innodb_file_per_table创build的,一个不是。 那个没有的,已经被倾倒了,准备好被重新装上。 但是,ibdata1文件仍然很大,我没有足够的可用空间。 在这种情况下,正常的build议是转储并删除每个数据库,停止MySQL,然后删除ibdata1和事务日志,然后重新加载数据库。
我的具体问题是:我可以保留单独使用innodb_file_per_table创build的数据库吗? 或者当我删除ibdata1时,它们会被销毁,尽pipe它们的所有文件是分开的?
我不能让这个数据库离线转储和重新加载它。 而且,因为它已经正确地用每个表格分开的文件制作,所以它觉得很没用。
我的具体问题是:我可以保留单独使用
innodb_file_per_table创build的数据库吗? 或者当我删除ibdata1时,它们会被销毁,尽pipe它们的所有文件是分开的?
单片ibdata1包含一些系统范围的数据。 这可能会导致数据丢失,试图手动删除它,而不是首先删除所有现有的数据库。
(有办法从这种情况中恢复,但是为什么要把自己放在那个位置呢?按照你提供的指示,转储所有的数据库,重新安装MySQL并重新加载它们,这是安全的select。
我不能让这个数据库离线转储和重新加载它。
你将不得不负担得起。 这只是一个中断 – 安排并实现。
我们的常驻MySQL专家证实,这是缩小ibdata1的唯一(安全)方式 ,我ibdata1他在这些问题上的专业知识。
(我还build议在安排停机窗口之前,先阅读他的其他post,并将其与该答案联系起来,您可以尽可能清理尽可能多的潜在问题,因为您将不得不停下停车窗口。 )
如果您正在运行MySQL 5.6,则可以利用称为可移动表空间的新function。
如果你没有运行5.6,你可以使用Percona Xtrabackup的innobackupex工具。这需要使用XtraDB(Percona的修改的InnoDB引擎,Percona Server的一部分)。 导入和导出单个表格
如果你没有运行5.6,并且不能运行Percona服务器
如果一个数据库需要启动,由于select是至关重要的,并且你有快速的存储(比如在ec2上的iops卷),一种最大限度地减less停机时间的方法是停止mysql,rsync over数据目录来快速卷,然后带回以只读方式启动主设备。
那么你有时间转储/导入等,而你的老主服务器selectqrys。 一旦转储/导入完成,第二个盒子准备好写入,只需在你的应用程序层代码中切入。
如果你的主人需要写在任何时候,你不能使用这个。 如果你有专门的奴隶,你可以locking主人,修正奴隶,并提升为主人。