问题背景
数据库恢复后视图中有较多的definer属性,需要修改,如果不嫌麻烦可以把视图删除重新创建,但是使用批量的方式修改definer属性更便捷
先查出所有的definer:
select DEFINER from information_schema.VIEWS;
在查出的definer中如果需要修改"abc"@"%"为"zxc"@"%",则执行以下语句生成修改语句:
select concat("alter DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW ",TABLE_SCHEMA,".",TABLE_NAME," as ",VIEW_DEFINITION,";") from information_schema.VIEWS where DEFINER='abc@%';
导出为sql文件,然后直接执行
select concat("alter DEFINER=`dflbj1`@`%` SQL SECURITY DEFINER VIEW ",TABLE_SCHEMA,".",TABLE_NAME," as ",VIEW_DEFINITION,";") from information_schema.VIEWS where table_schema='dflbj1' and DEFINER='dflbj@localhost' into outfile '/var/lib/mysql-files/dflbj1.sql';
mysqlpump备份提示 "dflbj"@"localhost"
无法查询某个表,但是这种一般是视图的错误,也没有提示是哪个库,有两个库都有这个表,那只能通过 information_schema.views
查询两个库中的视图使用了提示的 definer 了,发现是 dflbj1 这个用户和库下的表,视图definer很多都不对,使用上面的方法批量修改
评论