在复制的mysql结构中使用RENAME TABLE有什么风险?



我有一个cron脚本,创建一个更新版本的mysql表,优化网站搜索的目的。

在站点搜索中使用的表名为tblSearch
cronjob创建一个新表wrkSearch,当它完成填充表时结束删除tblSearch并重命名wrkSearch(两个表都有MySam引擎)

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

这很好,但我想知道这是一个解决问题的好方法。
我想知道你的考虑是否会根据表的大小而改变……例如:"解决方案对于非常大的表可能是危险的,因为…"

我知道每一个改变mysql表的查询都是在文件系统上写东西…但是做一个重命名而不是一个更新/插入之间有一些区别吗?我试图理解RENAME命令是否对文件系统更具侵略性

表上的另一个元素是数据库是用MASTER-SLAVE结构复制的…所以我也想知道这是否最终会增加RENAME查询

背后的风险

另一个对我来说很重要的方面是所使用的系统资源的数量…RENAME操作会比UPDATE/INSERT操作更贪婪吗?

你应该改变顺序;先重命名,然后删除:

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

由于RENAME是原子的,所以其他进程不会访问tblSearch失败;当第一次删除时,可能会发生重命名。

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

重命名本身非常快。如果您要从表中删除所有内容并创建新的表,则此方法很好。(但请检查它是否正确复制)

但是对于复制来说,这意味着需要传输表的整个数据。

如果可以的话,最好更新表中的数据——这样只会更改部分数据,而不是所有数据。

我应该指出,这种类型的操作是不被允许的——有很好的理由!但就像所有的规则一样,有时候你必须打破它们。

最新更新