从mysqldump备份执行相互依赖的视图

时间:2012-07-21 22:44:03

标签: python mysql database scripting mysqldump

mysqldump 创建一个转储,其中表(和视图)按字母顺序列出。当表之间存在外键关系时,这不是很方便,但是运行:

可以很容易地解决问题
SET FOREIGN_KEY_CHECKS=0;

我有一种情况,即视图,vwapple,依赖于视图,vworange,比如说。使用mysqldump,在vworange之前列出并执行vwapple,这是有问题的,因为我们将得到“view vworange不存在”错误消息。

这种情况如何解决?视图是否具有与表类似的解决方案?或者,为了解决这个问题,让每个视图独立是否更好?

注意
我正在使用python脚本恢复数据库。每个视图和表都在其单独的.sql文件中,因为我想独立地控制每个数据库对象。

1 个答案:

答案 0 :(得分:4)

最新版本的mysqldump,在转储整个数据库时,以这种方式解决问题:对于数据库中的每个视图,他们首先创建一个具有相同结构的空表,然后创建视图,删除每个占位符表在创建视图之前。似乎用视图替换表不会损害依赖于它的视图。

我知道这个,因为这种方法有另一个flaw,这就是我:视图中的行可能包含比表中的行更多的数据,因此无法创建一些占位符表,导致某些转储无法恢复没有人工干预。出于这个原因,尽管可能需要一些工作,但最好对视图进行拓扑排序。