我有一个需要每24小时重建一次的大型数据库。数据库是使用服务器上的自定义脚本构建的,该服务器会从不同文件中提取数据。问题是整个过程需要1分钟才能完成,停机时间为1分钟,因为我们需要删除整个数据库才能重建它(除了丢弃它之外别无他法)。
首先,我们计划构建一个临时数据库,然后删除原始数据库,然后将临时数据库重命名为原始名称,但MySQL不支持数据库重命名。
第二种方法是从临时数据库转储.sql文件并将其导入主(原始)数据库,但这也会导致停机。
最好的方法是什么?
答案 0 :(得分:3)
这是我做的事情。它不会导致零停机,但可以在不到一秒的时间内完成。
创建一个只包含真实数据库的界面元素的数据库。就我而言,它只包含视图定义,所有用户查询都通过此数据库。
每晚创建一个新数据库。完成后,更新视图定义以引用新数据库。我建议您在更新视图时关闭包含视图的数据库的用户访问权限,或者删除所有视图并重新创建视图 - 这样可以防止对旧数据库的部分访问。因为创建视图很快,所以这应该是一个非常快速的操作。
我们通过工作完成所有这些工作。实际上,在更改生产视图之前,我们会在另一个数据库上测试视图创建,以确保它们都能正常工作。
显然,如果你使用alter view
而不是要求所有视图保持一致,那么就没有停机时间,只是短暂的不一致。