我在更新后备份我的数据库时遇到问题。我一直在我的系统上四处寻找,试图找出原因。我运行的一个查询返回了这个结果。
Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES
Run Code Online (Sandbox Code Playgroud)
经过一些调查,这些视图的定义者似乎是一个已从系统中清除的旧开发者帐户。有这个问题的数据库和视图很少使用,并且大多数被保留用于存档目的。
大约有 40 个视图带有不再存在的定义器。有没有一种简单的方法可以一次性将定义者更改为不同的帐户?有没有办法让 mysqldump 简单地将所有视图转储到一个文件中,以便我可以编辑该文件并重新创建视图?
Der*_*ney 28
您可以将ALTER VIEW与信息模式结合使用。您提到将其转储到文本文件中,因此可能是这样的:
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW `",table_name,"` AS ", view_definition,";")
FROM information_schema.views WHERE table_schema='databasename'
Run Code Online (Sandbox Code Playgroud)
将此与mysql命令行混合使用(假设*nix,不熟悉windows):
> echo "*abovequery*" | mysql -uuser -p > alterView.sql
> mysql -uuser -p databasename < alterView.sql
Run Code Online (Sandbox Code Playgroud)
旁注:您不能直接更改 information_schema 条目。注意2:这一次仅适用于一个数据库,如果您省略 WHERE table_schema,则需要在每个数据库之间插入 USE 命令。
Rol*_*DBA 15
创建一个包含所有视图定义的文本文件:
mysql -uusername -ppassword -A --skip-column-names -e"SELECT CONCAT('SHOW CREATE VIEW ',table_schema,'.',table_name,'\\G') FROM information_schema.tables WHERE engine IS NULL" | mysql -uusername -ppassword -A --skip-column-names > AllMyViews.sql
Run Code Online (Sandbox Code Playgroud)
您可以从那里编辑 AllMyViews.sql。然后,删除视图
mysql -uusername -ppassword -A --skip-column-names -e"SELECT CONCAT('DROP VIEW ',table_schema,'.',table_name,';') FROM information_schema.tables WHERE engine IS NULL" | mysql -uusername -ppassword -A
Run Code Online (Sandbox Code Playgroud)
编辑 AllMyViews.sql 后重新加载它们
mysql -uusername -ppassword -A < AllMyViews.sql
Run Code Online (Sandbox Code Playgroud)
试一试 !!!
| 归档时间: |
|
| 查看次数: |
64069 次 |
| 最近记录: |