Navicat导出mysql数据库时出错怎么解决?

mysql用客户端导出sql文件时出错 提示 “ Cannot proceed because system tables used by Event Scheduler were found damaged at server start”,如图

试了下将mysql_upgrade.exe和mysqlcheck.exe两个文件复制到 APMServ5.2.6\MySQL5.1\bin目录下,通过命令行执行E:\APMServ5.2.6\MySQL5.1\bin\mysql_upgrade -u root -p,然后重启mysql,还是不能导出sql,请问怎么解决?谢谢!

项目上 MySQL 还原 SQL 备份经常会碰到一个错误如下,且通常出现在导入视图、函数、存储过程、事件等对象时,其根本原因就是因为导入时所用账号并不具有SUPER 权限,所以无法创建其他账号的所属对象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常见场景:1. 还原 RDS 时经常出现,因为 RDS 不提供 SUPER 权限;2. 由开发库还原到项目现场,账号权限等有所不同。

处理方式:

1. 在原库中批量修改对象所有者为导入账号或修改 SQL SECURITY 为 Invoker;2. 使用 mysqldump 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号。
二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会存在一个 DEFINER 和一个 SQL SECURITY 的属性,如下所示:

    --视图定义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



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

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-02
有二种方法:
1:如果对mysql没有绝对的管理权限,只能查看自己的;那么直接打开navicat,右击在打开菜单列表中“转储SQL文件”,然后直接保存就可以了。
2:如果你对mysql有绝对的管理权限;可以直接打开mysql的安装目录,找到 data文件夹,找到你建立的数据库的文件夹,直接复制你需要的另一个服务器的data文件夹下就可以了。这种是最文便的,也不会出现导入导出的乱码问题。本回答被提问者和网友采纳
相似回答