一尘不染

在多个视图上修改 DEFINER

mysql

一直在我的系统上四处寻找原因。我运行的一个查询返回了这个结果。

Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES

经过一番调查,这些视图的定义者似乎是一个已从系统中清除的旧开发者帐户。存在此问题的数据库和视图很少使用,并且大多数都被保留用于存档目的。

大约有 40 个视图的定义器不再存在。有没有一种简单的方法可以一次将所有内容的定义者更改为不同的帐户?有没有办法让 mysqldump 简单地将所有视图转储到一个文件中,以便我可以编辑该文件并重新创建视图?


阅读 60

收藏
2022-10-10

共1个答案

一尘不染

您可以将ALTER VIEW信息模式结合使用。您提到将其转储到文本文件中,所以可能是这样的:

SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW `",table_name,"` AS ", view_definition,";") 
FROM information_schema.views WHERE table_schema='databasename'

将其与 mysql 命令行混合(假设 *nix,不熟悉 windows):

> echo "*abovequery*" | mysql -uuser -p > alterView.sql
> mysql -uuser -p databasename < alterView.sql

旁注:您不能直接更改 information_schema 条目。注意 2:这一次仅适用于一个数据库,如果您不使用 WHERE table_schema,则需要在每个数据库之间插入 USE 命令。

2022-10-10