mysql批量修改definer
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

mysql批量修改definer

yuc
yuc
2024-05-07 / 最后修改: 2024-05-07 06:49 / 0 评论 / 5 阅读 / 正在检测是否收录...
问题背景

数据库恢复后视图中有较多的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很多都不对,使用上面的方法批量修改

0

评论

博主关闭了当前页面的评论