mysql复制表文件错误

1. 在原库中批量修改对象所有者为导入账号或修改 SQL SECURITY 为 Invoker;2. 使用 mysqldump 导出备份,然后将 SQL 文件中的对象所有者替换为导入账号。二、问题原因我们先来看下为啥会出现这个报错,那就得说下 MySQL 中一个很特别的权限控制机制,像视图、函数、存储过程、触发器等这些数据对象会...
mysql复制表文件错误
是不是拷贝之前没有关闭mysql服务?2012-08-30
项目上 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
三、改写内容上述这个 DEFINER 问题,个人想到最简单的解决方式就是 mysqldump 导出时直接摘除掉相关属性,但是 mysqldump 本身并不提供对应参数,所以比较蛋疼,无论是原库走脚本变更或是备份后修改 SQL 文件都不是非常方便,尤其是触发器的 DEFINER,只能先 DROP 再 CREATE 才可以变更。只能看下是否可以从 mysqldump 源码中去掉 DEFINER 定义。本次 mysqldump 改写主要有 2 个目的:1. 摘取备份中视图、函数、存储过程、触发器等对象的 DEFINER 定义;2. 尝试加上比较简单的备份进度显示(原生 mysqldump 的 verbose 参数不是非常清晰,想要实现 navicate 备份时的那种行数显示)。
改写好处:1. 可以避免还原时遇到 DEFINER 报错相关问题;2. 根据输出信息知道备份是否正常进行,防止备份中遇到元数据锁无法获取然后一直卡住的情况。
2020-12-28
怎样抓到安卡2012-08-30
mengvlog 阅读 22 次 更新于 2025-09-08 09:14:00 我来答关注问题0
  •  翡希信息咨询 故障分析 | 记一次 MySQL 复制故障 -Error_code:1317

    MySQL 从库报错信息指出,复制协调器因为工作线程中的错误而停止。具体的错误信息提示我们查看主库的二进制日志文件以及从库的错误日志或 performance_schema.replication_applier_status_by_worker 表以获取更多详情。二、排查步骤 查看 performance_schema.replication_applier_status_by_worker 首先,通过查询 ...

  •  阿暄生活 mysql主从复制数据不一致怎么办

    解决MySQL主从复制数据不一致问题,可按排查定位、修复、预防三步进行。排查与定位检查字符集配置,统一主从库服务器级、数据库级、表级及字段级字符集为utf8mb4,用SHOW VARIABLES LIKE 'character_set_%'和SHOW CREATE TABLE确认;验证复制链路连接字符集,执行SHOW SLAVE STATUSG确保从库IO线程使用正确...

  •  speedhot mysql导入数据库文件出错,求高手指点

    停止从库复制,恢复表 t;启动复制;解锁表 t。如果是大表,这里可以用可传输表空间方式备份、恢复表,减少锁表时间。

  •  深空见闻 mysql 疑难杂症

    1. 主机系统表损坏导致复制中断 这是一个非常棘手的问题,它可能导致备机复制延迟,主备无法自动切换,进而影响业务的读写。修复这类问题通常需要专业的技术支持,可能涉及跳过复制出错事务或不记binlog手工执行语句等操作。在处理此类问题时,务必确保数据安全,避免数据丢失或损坏。2. MySQL索引和锁的问题...

  •  76476567 MySQL主从复制:Slave_SQL_Running:No是怎么回事?

    表示主从复制断开了,看Last_Sql_Error就是最后的错误,两个错误都是数据表已经存在了,建议在你的my.cnf配置中忽略这些错误,如:slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误 你图上的错误号码就是 1050

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部