我有一个大型数据库,需要每 24 小时重建一次。该数据库是使用服务器上的自定义脚本构建的,该脚本从不同的文件脉冲数据。问题是整个过程需要 1 分钟才能完成,这就是 1 分钟的停机时间,因为我们需要删除整个数据库才能重建它(除了删除它,别无他法)。
一开始,我们打算建一个临时数据库,把原来的删掉,然后把临时数据库改成原来的名字,但是MySQL不支持数据库重命名。
第二种方法是从临时数据库转储 .sql 文件并将其导入主(原始)数据库,但这也会导致停机。
做这个的最好方式是什么?
这是我做的事情。它不会导致零停机时间,但可以在不到一秒钟的时间内完成。
创建一个只有与真实数据库的接口元素的数据库。在我的例子中,它只包含视图定义,所有用户查询都通过这个数据库。
每晚创建一个新数据库。完成后,更新视图定义以引用新数据库。我建议要么在更新视图时关闭用户对包含视图的数据库的访问,要么删除所有视图并重新创建它们——这可以防止对旧数据库的部分访问。因为创建视图很快,所以这应该是一个非常快的操作。
我们通过一份工作来完成这一切。事实上,在更改生产视图之前,我们会在另一个数据库上测试视图创建,以确保它们都正常工作。
显然,如果您使用alter view而不是要求所有视图的一致性,那么就没有停机时间,只是短暂的不一致。
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |