Code前端首页关于Code前端联系我们

mysql无法导出文件问题,mysql数据库无法导入sql文件,解决办法!

terry 2年前 (2023-09-30) 阅读数 40 #Mysql
文章标签 Mysql

文章内容列表:

  • 1.Navicat导出mysql数据库出错如何解决?
  • 2、Mysql无法导出
  • 3.请帮忙,,,导出mysql文本文件时出错。错误 1 ​​(hy000):无法创建
  • 4.导出mysql中的数据
  • 5. MySQL数据库导出导入以及常见故障排除
  • 6.求助:为什么mysql8.0版本更改了my.ini文件中的secure_file_priv,重启服务后仍然无法导出?

项目中MySQL恢复SQL备份经常会遇到以下错误,通常是视图、函数、存储过程、事件等对象。导入时发生。造成这种情况的根本原因是导入时使用的帐户没有SUPER权限,因此无法创建属于其他帐户的对象。错误 1227 (42000):访问被拒绝;此操作需要(至少一个)SUPER权限。 常见场景: 1. 常见于恢复RDS时,因为RDS不提供SUPER权限; 2、开发者库在项目现场重置账户权限等。他们是不同的。

加工方法:

1.批量将原数据库中对象的所有者更改为导入的帐户或将SQL SECURITY更改为Invoker; 2. 使用mysqldump导出备份,然后将SQL文件中的对象所有者替换为导入的帐户。

2。问题原因首先我们来看看为什么会出现这个错误。那么我们就需要讲一下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`@`%` 触发 t_test

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

对象定义,您可以在创建对象时手动指定用户。如果不指定,则默认为当前连接用户;

SQL SECURITY:指定谁有什么权限执行对象,有两个选项,一是DEFINER,二是INVOKER,默认系统指定DEFINER; DEFINER:表示按照定义者的权限执行; INVOKER:表示根据调用者的许可执行。

如果导入账户具有SUPER权限,即使对象的所有者账户不存在也可以导入成功。但是,在查询该对象时,如果该对象是 SQL SECURITY DEFINER,则会收到一条错误消息,指出该帐户不存在。 ERROR 1449 (HY000): User指定为定义者('root'@'%')不存在

重写的优点: 1.可以避免恢复时出现DEFINER错误的问题; 2.根据输出信息了解备份是否正常,防止备份陷入元数据锁不可用进而卡住的情况。

Mysql无法导出

未将输出重定向到目标文件。

如果没有指定目标文件,mysqldump默认打印结果。

mysqldump -h localhost -u root -p test backup.sql

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门