mysql 不同步存储过程_【问题】mysql存储过程主从同步出错的问题

本帖最后由 wlzjsj 于 2013-3-15 14:46 编辑

一主一从的2台服务器(mysql 5.1),一直主从相安无事,突然某天从库报警,报出的错误是主键冲突:

Last_SQL_Errno: 1062

Last_SQL_Error: Error 'Duplicate entry '1' for key 'PRIMARY'' on query. Default database:......

仔细查看了下报警的语句,原来是来自于主库上的一个存储过程,这个是个定时批量任务,每隔一段时间就会执行一次,内容大致如下:

ProcA

begin

truncate tabA;

insert into tabA (a,b,c) seelct x1,(select x2 from B where ...),x3 from C where x4=1;

insert into tabA (a,b,c) seelct x1,(select x2 from B where ...),x3 from C where x4=0;

end;

其中tabA表中的a,b,c字段均不是主键,也非唯一索引字段,tabA有个id为主键,自增长。

在主库没有问题,同步到从库,从库报错,解析了主库的binlog和从库的relay-binlog均可以看到 存储过程是拆分条三个语句传送过去的,执行顺序也是对的。

另外做过一个场景:在从库手动给tabA表插入数据,没有问题,等到执行那个存储过程的时候,又开始报主键冲突。而去查这个tabA,事实上是空表;

提供以下参数:

mysql> show variables like 'binlog_format';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| binlog_format | MIXED |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like 'log_bin_trust_routine_creators';

+--------------------------------+-------+

| Variable_name                  | Value |

+--------------------------------+-------+

| log_bin_trust_routine_creators | OFF    |

+--------------------------------+-------+

1 row in set (0.00 sec)

-----------------------------------------------------以上2个参数主从一致--------------------------------

从库不同的地方配置:

mysql> show variables like 'read_only';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only     | ON    |

+---------------+-------+

1 row in set (0.00 sec)

=========================

补充:

该参数也是主从一致,如下:

mysql> SHOW VARIABLES LIKE 'auto_increment_%';

+--------------------------+-------+

| Variable_name            | Value |

+--------------------------+-------+

| auto_increment_increment | 1     |

| auto_increment_offset    | 1     |

+--------------------------+-------+

另外,我怀疑过是否是硬件问题,硬盘有坏道什么的,查看过从库的系统message,均未有任何错误。可排除硬件硬盘问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值