为什么重命名数据库需要复制数据?

时间:2015-12-21 20:52:54

标签: mysql database rename

使用phpMyAdmin,我试图重命名我的6GB数据库,却发现该操作需要几个小时。根据{{​​3}},听起来重命名数据库需要创建一个新数据库并复制数据。为什么这个名称只是一个指向某些文本的指针,可以随意更改?

2016年3月14日编辑

我最初接受了Gandalf的答案,因为我无法复制数据库重命名这么长时间。但这个漫长的重命名过程再次发生。这是phpMyAdmin悬挂的截图:

this SO question

以下是直接连接到MySQL服务器时SHOW PROCESSLIST的结果的屏幕截图:

enter image description here

看起来查询在添加约束时正在旋转。我很确定phpMyAdmin运行的命令是:

RENAME TABLE harmonizome_temp TO harmonizome;

1 个答案:

答案 0 :(得分:0)

如果在此过程中出现错误,则可能需要确保数据库完整性。

有关数据库的信息存储在文件系统(每个数据库是一个目录)中,也存储在INFORMATION_SCHEMA数据库中。重命名数据库时,两者都必须更新。如果它只是重​​命名了目录并更新了INFORMATION_SCHEMA,那么会有一段时间不同步。如果在此阶段中止该过程,则数据库将被破坏。

通过复制数据,可以确保它们永远不会同步。在之后更新所有INFORMATION_SCHEMA以引用新数据库名称之前,不会删除旧目录。如果进程在中间中止,则文件系统中将存在重复数据,但INFORMATION_SCHEMA将指向一个或另一个(事务可以确保INFORMATION_SCHEMA中的所有内容都以原子方式更新)。