Mar*_*rcx 5 mysql mysqldump backup view restore
我有一个包含一些表、视图和例程的数据库 (InnoDB)...
我定期使用命令行进行备份:
mysqldump -u user -ppassword --routines db_name > backup.sql
Run Code Online (Sandbox Code Playgroud)
但是我在使用工作台创建备份时也遇到了问题
顺便说一句,备份过程终止没有问题或警告......
恢复后我遇到了一些问题,恢复过程结束没有错误,但有些视图已损坏
我无法改变视图本身..
我该如何解决?为什么我有这个问题?
我使用 MySQL Workbench 5.2.35 CE 得到一个空白/空结果....
使用普通 sql(描述 view_name)我收到以下错误:
错误代码:1356。视图“db.view_name”引用了无效的表或列或函数或视图的定义者/调用者缺乏使用它们的权限
但select * from view_name
仍然返回预期结果
SHOW CREATE VIEW view_name
错误代码:1356。视图“view_name”引用了无效的表或列或函数 > 或视图的定义者/调用者缺乏使用它们的权限
SELECT * FROM INFORMATION_SCHEMA.TABLES
where table_schema = 'db_name' and 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'
Run Code Online (Sandbox Code Playgroud)
此视图是由其他视图相互连接生成的视图。
视图的定义必须包含在转储文件中。
要查看定义,请对转储文件运行以下命令:
cat backup.sql | grep -A 3 "CREATE ALGORITHM" > backup_views.sql
cat backup_views.sql
Run Code Online (Sandbox Code Playgroud)
然后,您可以删除有问题的视图并手动重新创建它们。
如果您有另一台服务器已经建立了视图,则应该仅 mysqldump 模式。它还将包含视图。@DTest 和我之前写过关于此的文章。
在 mysqldump 中,视图始终是最后处理的(在所有表之后)。
如果一个视图引用另一个视图,并且视图的创建顺序没有考虑到这一点,也可能会出现此问题。