重新生成大量MySQL表的最佳方法

时间:2009-03-30 10:36:56

标签: mysql

我正在开发一个应用程序,它需要每天重建几个非常大的MyISAM表(主要是搜索使用最新行业和站点数据重建的表)。用于重建这些表的查询非常繁重,不适合在主生产数据库上运行。

我们有一个专门用于生成这些表的服务器,我们使用主从复制在生产数据库上保留最新的生产数据库副本,我们将其用作重建查询的一部分。我的问题是,一旦构建了这些表,将它们转移到生产数据库的最佳方法是什么(有效地删除旧表并用新表替换它)?

我们之前刚刚在服务器之间移动了二进制数据和索引文件并复制到位。然而,这与复制不太匹配。

这项任务有哪些其他方法?生产和处理数据库之间的主 - 主复制是否有用?

2 个答案:

答案 0 :(得分:2)

如何在单独的表格中构建新表格,例如“newfoo”,只要您需要生成它,并且当您准备交换它时,只需rename

drop table if exists oldfoo;
rename table foo to oldfoo, newfoo to foo;

答案 1 :(得分:0)

我很久以前就遇到过同样的问题,这就是我所做的:使用两张桌子,一张是偶数天,另一张是奇数天。

因此,通过代码或存储过程,您可以通过将一年中的天数除以2来选择插入当天的位置并检查结果。

如此奇怪的日子你处理偶数表,反之亦然。

这是我们用来选择表格的代码

<?php
$day_of_year = (int) date('z');
$table_sufix = $day_of_year % 2 ? "even" : "odd";
$insert_on = "table_" . $table_sufix;

?>

和过程

<?php
$day_of_year = (int) date('z');
$table_sufix = $day_of_year % 2 ? "odd" : "even"; // note only this little change
$process_table = "table_" . $table_sufix;

?>