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

时间:2011-07-27 11:49:12

标签: mysql database-replication

我有一个cron脚本,可以创建一个针对站点搜索目的进行优化的mysql表的更新版本。

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

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

这很好用,但我想知道这个问题是否很好 我想知道您的注意事项是否会因表格大小而发生变化...例如:“解决方案可能对非常大的表格造成危险......”

我知道在mysql表中更改内容的每个查询都是在文件系统上写东西......但是在执行RENAME而不是UPDATE / INSERT之间有什么区别吗?我试图了解RENAME命令是否对文件系统更具 aggresive

表上的另一个元素是te数据库使用MASTER-SLAVE结构复制...所以我也想知道这是否最终会影响RENAME查询背后的风险

另一个对我很重要的方面是使用的系统资源量...... RENAME操作可能比UPDATE / INSERT更贪婪吗?

2 个答案:

答案 0 :(得分:2)

你应该改变顺序;首先重命名,而不是丢弃:

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

由于RENAME是原子的,因此其他进程无法访问tblSearch;首次丢弃时,可能会重命名。

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

答案 1 :(得分:1)

重命名本身非常快。如果要删除表中的所有内容并将其创建为新的,则此方法很好。 (虽然请检查它确实正确地复制了。)

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

如果可以,最好更新表格中的数据 - 这样只会改变部分数据,而不是一切。

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