问题是这样的,使用mysqldump备份线上数据库之后,然后通过mysql 命令行恢复到线下数据库,发现视图都成了表。
为什么会这样呢?这就得聊聊mysql备份恢复的机制了
其实查看mysqldump备份产生的sql语句,会发现视图首先会恢复成表,之后再删除表,新建视图。

如下图,可以看到在15572行先创建了v_t_borrow_details表,然后在21322行创建了v_t_borrow_details视图
使用mysql恢复数据时视图变成表_第1张图片

这样是为了避免依赖关系,比如有2个 VIEW: v_a, v_b
v_a 引用 v_b
如果先建 v_a ,那么它引用的 v_b 还没有创建,是建不成功的,而先把所有的 view 都弄成表先建一次,表是没有依赖的,都会创建成功,然后再逐个删除 view 和创建 view,这时候引用的东东都是以表或 view 的形式存在了,不会因为依赖的对象出问题。
而之所以视图会变成表了,那是因为在恢复过程中出错导致了恢复中断,后面的语句都skipping了。