当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MySql:存储程序、函数、触发程序及复制:常见问题

MYSQL
MySQL忘记密码恢复密码的实现方法
mysql 时间转换函数的使用方法
使用mysql的disctinct group by查询不重复记录
mysql备份恢复mysqldump.exe几个常用用例
超详细mysql left join,right join,inner join用法分析
mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下载
比较详细的MySQL字段类型说明
mysql 记录不存在时插入 记录存在则更新的实现方法
MYSQL基础之连接MYSQL、修改密码、添加用户
mysql数据库优化必会的几个参数中文解释
mysql中文排序注意事项与实现方法
MySQL 5.0触发器参考教程
MySQL5创建存储过程的示例
MYSQL5 masterslave数据同步配置方法
mysql数据库导出xml的实现方法
MySql增加用户、授权、修改密码等语句
Mysql默认设置的危险性分析
用MySQL创建数据库和数据库表代码
Mysql如何避免全表扫描的方法
mysql的校对规则引起的问题分析

MYSQL 中的 MySql:存储程序、函数、触发程序及复制:常见问题


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 64 ::
收藏到网摘: n/a

  • MySQL中存储程序和函数对复制起作用吗? 

是的,在存储程序和函数中被执行标准行为被从主MySQL服务器复制到从服务器。

  • 在主服务器上创建的存储程序和函数可以被复制到从服务器上么?

是的,通过一般DDL语句执行的存储程序和函数,其在主服务器上的创建被复制到从服务器,所以目标将存在两个服务器上。对存储程序和函数的ALTER DROP语句也被复制。

  • 行为如何在已复制的存储程序和函数里发生?

MySQL纪录每个发生在存储程序和函数里的DML事件,并复制这些单独的行为到从服务器。执行存储程序和函数的切实调用不被复制。

  • 对一起使用存储程序,函数和复制有什么特别的安全要求么?

是的,因为一个从服务器有权限来执行任何读自主服务器的二进制日志的语句,指定的安全约束因与复制一起使用的存储程序和函数而存在。如果复制或二进制日志大体上是激活的(为point-in-time恢复的目的),那么MySQL DBA 有两个安全选项可选:

    • 任何想创建存储程序的用户必须被赋予SUPER权限。
    • 作为选择,一个DBA可以设置log_bin_trust_routine_creators系统变量为1,它将会允许有标准CREATE ROUTINE权限的人来创建一个存储程序和函数。

 

  • 对复制存储程序和函数的行为有什么限制?

嵌入到存储程序中的不确定(随机)或时基行不能适当地复制。随机产生的结果,仅因其本性,是你可预测的和不能被确实克隆的。因此,复制到从服务器的随机行为将不会镜像那些产生在主服务器上的。注意,声明存储程序或函数为DETERMINISTIC或者在log_bin_trust_routine_creators中设置系统变量为0 将会允许随即值操作被调用。

此外,时基行为不能在从服务器上重新产生,因为在存储程序中通过对复制使用的二进制日志来计时这样的时基行为是不可重新产生的,因为该二进制日志仅纪录DML事件且不包括计时约束。

最后,在大型DML行为(如大批插入)中非交互表发生错误,该非交互表可能经历复制,在复制版的非交互表中主服务器可以被部分地从DML行为更新。但是因为发生的那个错误,对从服务器没有更新。 对函数的DML行为,工作区将被用IGNORE关键词来执行,以便于在主服务器上导致错误的更新被忽略,并且不会导致错误的更新被复制到从服务器。

 

  • 上述的限制会影响MySQL point-in-time恢复的能力吗?

影响复制的同一限制会影响point-in-time恢复。

  •  MySQL要做什么来改正前述的限制呢?

将来发行的MySQL预期有一个功能去选择复制该如何被处理:

    •  基于语句的复制(当前实现)。
    • 行级别复制(它将解决所有早先描述的限制)。
  • 触发程序对复制起作用么?

MySQL 中的触发程序和复制象在大多数其它数据库引擎中一样工作,在那些引擎中,通过触发程序在主服务器上执行的行为不被复制到从服务器。取而代之的是,位于主MySQL服务器的表中的 触发程序需要在那些存在于任何MySQL从服务器上的表内被创建,以便于触发程序可以也可以在从服务器上被激活。

 

  •  一个行为如何通过从主服务器上复制到从服务器上的触发程序来执行呢?

首先,主服务器上的触发程序必须在从服务器上重建。一旦重建了,复制流程就象其它参与到复制中的标准DML语句一样工作。例如:考虑一个已经插入触发程序AFTEREMP表,它位于主MySQL服务器上。同样的EMP表和AFTER插入 触发程序也存在于从服务器上。复制流程可能是:

1.    EMP做一个INSERT语句。

2.   EMP上的AFTER触发程序激活。

3.    INSERT语句被写进二进制日志。

4.    从服务器上的复制拾起INSERT语句给EMP表,并在从服务器上执行它。

5.    位于从服务器EMP上的AFTER触发程序激活。