复制mysql结构中的RENAME TABLE有哪些风险?

问题描述:

我有一个cron脚本,它创建一个为站点搜索目的而优化的mysql表的更新版本。复制mysql结构中的RENAME TABLE有哪些风险?

那就是在网站搜索中使用的表称为tblSearch
中的cronjob创建新表wrkSearch,当它已经完成填充表结束 下降tblSearch和重命名wrkSearch (包括表有MySam引擎)

DROP TABLE IF EXISTS `tblSearch 
RENAME TABLE `wrkSearch` TO tblSearch 

这是工作正常,但我想知道,如果是一个很好的解决问题的方法。
我想知道,如果你能考虑更改基于表大小...例如:“该解决方案可以为非常大表造成危险......”

我知道,每个查询这种情况正在改变mysql表中的某些东西正在将文件写入文件系统中......但是在执行RENAME而不是UPDATE/INSERT之间有区别吗?我试图了解,如果RENAME命令对文件系统的更多攻击

在桌子上的另一个要素是TE数据库复制一个主从结构的事实,所以,我也想知道,如果这最终可能incrase风险的重命名查询

另一个背后对我来说很重要的一点是所使用的系统资源的数量...... RENAME操作可能比UPDATE/INSERT更贪婪吗?

重命名本身超快。如果你从表格中删除所有东西并创建新鲜的方法,那么这种方法很好。 (虽然请检查它是否确实复制正确。)

但是关于复制,它意味着需要传输表的整个数据。

如果可以,更新表中的数据会更好 - 这样,只有部分数据发生变化,而不是所有变化。

我应该指出,这种类型的操纵是皱眉 - 有充分的理由!但是像所有规则一样,有时你必须打破它们。

+0

请问您可以扩展您的最后陈述吗?为什么这种类型的操纵是皱眉 - 有很好的理由_? – nulll

您应该更改顺序;第一重命名,比降:

RENAME TABLE tlbSearch TO tblSearchDropMe, wrkSearch TO tlbSearch; 
DROP TABLE tblSearchDropMe; 

由于重命名是原子没有办法其他进程将永远无法进入tblSearch;当第一次下降,然后重命名这可能会发生。

除此之外,我没有看到任何复制相关的问题。

+0

感谢您的建议,但tblSearch的不可用性不是问题 – nulll