MySQL 无需停机即可更新整个数据库

Joh*_*ohn 1 mysql sql

我有一个大型数据库,需要每 24 小时重建一次。该数据库是使用服务器上的自定义脚本构建的,该脚本从不同的文件脉冲数据。问题是整个过程需要 1 分钟才能完成,这就是 1 分钟的停机时间,因为我们需要删除整个数据库才能重建它(除了删除它,别无他法)。

一开始,我们打算建一个临时数据库,把原来的删掉,然后把临时数据库改成原来的名字,但是MySQL不支持数据库重命名。

第二种方法是从临时数据库转储 .sql 文件并将其导入主(原始)数据库,但这也会导致停机。

做这个的最好方式是什么?

Gor*_*off 5

这是我做的事情。它不会导致零停机时间,但可以在不到一秒钟的时间内完成。

创建一个只有与真实数据库的接口元素的数据库。在我的例子中,它只包含视图定义,所有用户查询都通过这个数据库。

每晚创建一个新数据库。完成后,更新视图定义以引用新数据库。我建议要么在更新视图时关闭用户对包含视图的数据库的访问,要么删除所有视图并重新创建它们——这可以防止对旧数据库的部分访问。因为创建视图很快,所以这应该是一个非常快的操作。

我们通过一份工作来完成这一切。事实上,在更改生产视图之前,我们会在另一个数据库上测试视图创建,以确保它们都正常工作。

显然,如果您使用alter view而不是要求所有视图的一致性,那么就没有停机时间,只是短暂的不一致。