首页 > 数据库 >mysqldump最佳实践(2)

mysqldump最佳实践(2)

时间:2023-01-26 12:11:32浏览次数:47  
标签:函数 routines 实践 视图 最佳 导入 mysqldump definer

​导入存储过程、函数和触发器

默认情况下,mysqldump导入视图和触发器。但是,它不导入过程、函数和事件。要导入过程和函数,应该指定--routines选项,要导入事件,应该指定--events选项。

1.导入触发器

mysqldump默认情况下尝试转储数据库中的所有触发器。为了能够转储表的触发器,必须具有表的TRIGGER特权。如果dump用户没有这个权限,触发器将被跳过,mysqldump将不会抛出任何错误。因此,如果没有看到任何触发器导入到目标数据库,请不要感到惊讶。

2.导入事件

要导入事件,在调用mysqldump时需要指定--events选项。该选项需要这些数据库的EVENT特权。同样,如果转储用户没有这些权限,mysqldump将静默跳过事件,即使你在调用mysqldump时指定了--events选项。

3.导入函数和存储过程

要导入routines,在调用mysqldump时需要指定--routines选项。该选项需要global select权限。即使在这种情况下,如果转储用户没有这些权限,mysqldump也会无声地跳过函数和过程,即使你在调用mysqldump时指定了--routines选项。

3.1导入非确定性函数

修改数据的存储程序如果不能产生可重复的结果,则称为非确定性程序。例如rand()函数。在复制设置中使用此类函数尤其具有挑战性,因为它们可能导致源和副本上的数据不同。为了控制这种可能性,MySQL在启用二进制日志时对函数创建施加了某些限制。

默认情况下,CREATE FUNCTION语句,必须显式指定deterministic、no sql或reads sql data中的至少一个。否则将发生错误:

ERROR 1418 (HY000) at line 181: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_funable)

因此,如果函数在源上没有声明为deterministic 的,并且在目标库上启用了二进制日志记录,那么在转储恢复期间将看到上述错误。因此,提前了解函数的确定性性质是很重要的。如果您确信函数是确定性的,那么在恢复操作之前,需要在目标上打开log_bin_trust_function_creators配置。启用后,MySQL即使启用了二进制日志记录,也允许创建这样的函数。

4.stored routines和视图的SQL安全特性。

MySQL允许在创建存储程序或视图时指定sql security上下文。sql security可以指定为definer或invoker。

如果sql_security上下文是definer,则routines使用routines definer子句中命名的帐户的特权执行。如果上下文是invoker,routines将使用调用它的用户的特权执行。默认值为definer。

如果要恢复routines或视图,则需要确保目标数据库中存在定义者用户帐户,并具有适当的授权。否则在恢复过程中会遇到失败。

让我们用一个与视图相关的示例来演示这一点。

让我们假设你有视图v1和v2定义如下:

CREATE definer=admin@'%'V1 AS SELECT * FROM solution_table;
CREATE definer=admin@'%'SELECT * FROM V1 where num1=10;

请注意,视图在默认情况下被mysqldump转储,如果你的目标用户不是'admin',你将在恢复操作期间遇到以下错误:

Command failed with error - ERROR 1449 (HY000) at line 206 in file: '/mysql_data/mysqldump/sqldump_1582457155758.sql': The user specified as a definer ('admin'@'%') does not exist.

注意,仅仅确保用户存在是不够的,用户还需要有适当的权限来执行视图。例如,如果目标用户admin@'%'存在,但在mydb数据库上没有SELECT权限,将看到一条错误消息:

'/mysql_data/mysqldump/sqldump_1582456858033.sql':View 'mydb.V2' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them.
 

 

标签:函数,routines,实践,视图,最佳,导入,mysqldump,definer
From: https://www.cnblogs.com/abclife/p/17067376.html

相关文章

  • mysqldump最佳实践(1)
    1.空间需求首先,重要的是要确保目标数据库有足够的空间来保存导入的数据。具体来说,如果在目标MySQL数据库上启用了二进制日志,则需要非常谨慎,因为导入数据时生成的二进制日......
  • caddyserver 生产运行一种玩法实践
    实际上就是一个尝试,毕竟如果生产使用了caddyserver做为一些核心业务只是需要做不少考虑的参考图  备注:以上图是基于自建acme服务处理的(比较适合内部服务),因为caddy......
  • C++ 单例模式最佳实践
    单例模式有很多种实现:懒汉/饿汉非线程安全线程安全每次判空加锁(效率不高)DCL:Double-checklock(繁琐,C++11之前的最佳实现)Meyers’singleton:静态变量(简洁,C++11之后......
  • web实践学习1
    20201303张奕博2023.1.24页面结构RabbitCraftGo页面的整体结构如下,其中canvas.webgl是用于渲染场景的容器、剩余标签都是一些装饰元素或提示语。W/↑A/←S......
  • 工作这么多年,我总结的数据传输对象 (DTO) 的最佳实践
    前言数据传输对象(DTO)是一种设计模式,常用于软件开发不同层或者不同系统之间传输数据。DTO的主要目的是封装数据并防止它被其他层或系统直接访问或修改。通过遵循一组......
  • 【Linux技术专题系列】「必备基础知识」一起探索和实践sftp配置之密钥方式登录
    FTP服务-vsftp协议实现我们常用的是FTP协议,主要是通过VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是VerySecureFTP从此名称可以看出来,编制者的初......
  • 【Linux技术专题系列】「必备基础知识」一起探索和实践sftp配置之密钥方式登录
    FTP服务-vsftp协议实现我们常用的是FTP协议,主要是通过VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是VerySecureFTP从此名称可以看出来,编制者的......
  • 【提升团队运营效率】交易履约之订单中心实践
    本文作者:京东科技-市场与平台运营中心-平台研发部,晏银喜、张学君、袁宝龙、高传江、杨迎心、游斌平、付达。特别感谢:杨广兴、张然、姬英泽、赵宁、张彤,在系统建设过程中的......
  • Python-sklearn初步实践
    Python-sklearn实践1sklearn实践Python有关于机器学习的库sklearn,我们可以使用sklearn来快速得到想要的机器学习算法,它不仅包括了很多学习算法,还包含了预处理、微调和评......
  • 30 个Elasticsearch调优最佳实践!
    ES发布时带有的默认值,可为es的开箱即用带来很好的体验。全文搜索、高亮、聚合、索引文档等功能无需用户修改即可使用,当你更清楚的知道你想如何使用es后,你可以作很多的......