恢复MySQL备份时查看问题

我有一个数据库(InnoDB),包含一些表,视图和例程……

我定期使用命令行进行备份:

mysqldump -u user -ppassword --routines db_name > backup.sql

但我也有使用workbench来创建备份的问题

顺便说一下备份过程终止没有问题或警告……

恢复后我遇到了一些问题,恢复过程结束没有错误,但有些视图已损坏

>如果我尝试改变它或查看结构,我得到一个空/空结果
>如果我在视图上执行选择,我会收到正确的结果(如视图未损坏)…

我不能改变观点本身..

我该如何解决?为什么我有这个问题?

我使用MySQL Workbench 5.2.35 CE得到一个空白/空结果….

使用普通的sql(描述view_name)我收到以下错误:

Error Code: 1356. View ‘db.view_name’ references invalid table(s) or
column(s) or function(s) or definer/invoker of view lack rights to use
them

但select * from view_name仍然返回预期的结果

SHOW CREATE VIEW view_name

Error Code: 1356. View ‘view_name’ references invalid table(s) or column(s) or function(s) > or definer/invoker of view lack rights to use them

SELECT * FROM INFORMATION_SCHEMA.TABLES
table_schema =’db_name’和table_name =’view_name’

TABLE_CATALOG   def 
TABLE_SCHEMA    db_name 
TABLE_NAME      view_name 
TABLE_TYPE  VIEW
ENGINE  VERSION NULL
ROW_FORMAT  NULL
TABLE_ROWS  NULL
AVG_ROW_LENGTH  NULL
DATA_LENGTH NULL
MAX_DATA_LENGTH NULL
INDEX_LENGTH    NULL
DATA_FREE   NULL
AUTO_INCREMENT  NULL
CREATE_TIME NULL
UPDATE_TIME NULL
CHECK_TIME  NULL
TABLE_COLLATION NULL
CHECKSUM    NULL
CREATE_OPTIONS  NULL
TABLE_COMMENT  'View ''db_name.view_name'' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them'

此视图是由其他视图相互连接生成的视图.

解决方法:

View的定义必须包含在转储文件中.

要查看定义,请在dumpfile上运行以下命令:

cat backup.sql | grep -A 3 "CREATE ALGORITHM" > backup_views.sql
cat backup_views.sql

然后,您可以删除有问题的视图并手动重新创建它们.

如果你有另一台服务器已经建立了视图,你应该mysqldump仅架构.它也将包含视图. @DTest and I wrote earlier posts on this.

始终在mysqldump中处理视图(在所有表之后).

如果一个视图引用另一个视图,并且创建视图的顺序没有考虑到这一点,也可能会出现此问题.

上一篇:从数据文件中恢复mysql数据库


下一篇:在WCF程序中动态修改app.config配置文件