博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql题目 以下语句错误的是什么意思_这条mysql语句有什么问题吗?教程上不出错,我全复制却出错....
阅读量:5869 次
发布时间:2019-06-19

本文共 1106 字,大约阅读时间需要 3 分钟。

--视图定义CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW v_test

--函数定义CREATE DEFINER=`root`@`%` FUNCTION `f_test()` RETURNS varchar(100) SQL SECURITY DEFINER

--存储过程定义CREATE DEFINER=`root`@`%` PROCEDURE `p_test`() SQL SECURITY DEFINER

--触发器定义CREATE DEFINER=`root`@`%` trigger t_test

--事件定义CREATE DEFINER=`root`@`%` EVENT `e_test`

DEFINER:对象定义者,在创建对象时可以手动指定用户,不指定的话默认为当前连接用户;

SQL SECURITY:指明以谁的权限来执行该对象,有两个选项,一个为 DEFINER,一个为 INVOKER,默认情况下系统指定为 DEFINER;DEFINER:表示按定义者的权限来执行; INVOKER:表示按调用者的权限来执行。

如果导入账号具有 SUPER 权限,即使对象的所有者账号不存在,也可以导入成功,但是在查询对象时,如果对象的 SQL SECURITY 为 DEFINER,则会报账号不存在的报错。ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

改写内容上述这个 DEFINER 问题,个人想到最简单的解决方式就是 mysqldump 导出时直接摘除掉相关属性,但是 mysqldump 本身并不提供对应参数,所以比较蛋疼,无论是原库走脚本变更或是备份后修改 SQL 文件都不是非常方便,尤其是触发器的 DEFINER,只能先 DROP 再 CREATE 才可以变更。只能看下是否可以从 mysqldump 源码中去掉 DEFINER 定义。本次 mysqldump 改写主要有 2 个目的:1. 摘取备份中视图、函数、存储过程、触发器等对象的 DEFINER 定义;2. 尝试加上比较简单的备份进度显示(原生 mysqldump 的 verbose 参数不是非常清晰,想要实现 navicate 备份时的那种行数显示)。829d58edca183257c3e114aac96d7953.png

改写好处:1. 可以避免还原时遇到 DEFINER 报错相关问题;2. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。

转载地址:http://nytnx.baihongyu.com/

你可能感兴趣的文章
Clipboard 实现网页复制粘贴
查看>>
Thinkphp5 模型里别名alias不生效bug【已解决】
查看>>
twcms Linux下目录权限设置
查看>>
基于RHEL 6.5安装Oracle 11g详细教程(5)——安装Oracle
查看>>
windows tomcat 启动报错TOMCAT JAVA_HOME or JRE_HOME environment variable is not defined correctly...
查看>>
2006年4月二级C语言笔试试题真题及答案(附答案)
查看>>
查询各部门销售目标
查看>>
nginx 日志
查看>>
我的友情链接
查看>>
System Center Virtual Machine Manager 2012 RC– Evaluation
查看>>
Access数据类型与.net OleDbType枚举类型的对应
查看>>
从零开始写类似jQuery的Javascript框架
查看>>
FRS 迁移到DFSR概述(第一部分 )
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
排序算法(二)之希尔排序、堆排序
查看>>
SVN Windows 客户端设置
查看>>
PyCUDA学习:Helloworld
查看>>
1月第三周网络安全报告:放马站点域名258个
查看>>
各大网站的架构分析
查看>>
nagios plugins for check remote port status
查看>>