system user replication super privilege error

2010-04-19 7:13 pm

今天发现一台mysql的slave不能同步,竟然报错是说system user没有“ SUPER PRIVILEGE”,
system user怎么会没有对这个库的权限呢?而且以前也没出现过,后来发现竟然是trigger搞
的鬼,在mysql里面触发器原来创建的用户不是system user,同步下来的时候会执行到触发器,
所以报错没有super privilege,删除触发器,同步成功,或者将触发器的创建用户改为system user。
当然本来应该不让slave有触发器这种可能会造成master slave不同步的操作,可以让触发器在master,
slave只是执行触发器产生的sql就行了。在master端也需要注意trigger的用户问题。

推荐(0)
收藏

mysql trigger delete

2009-08-26 1:42 pm

今天想用mysql的触发器来实现对原来数据表拼音字段的扩展,写法是:

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
  FOR EACH ROW BEGIN
    INSERT INTO test2 SET a2 = NEW.a1;
    DELETE FROM test3 WHERE a3 = NEW.a1;
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  END
|
DELIMITER ;

一看就能看懂,但是发现mysql触发器有几个弱点,

1,mysql4是没有触发器的

2,触发器不能对本表操作(这个不是缺点,是出于数据安全方面的考虑吧)

看来不得不放弃mysql trigger来出来老数据表的拼音问题了。

接下来写一个delete的例子:
首先要注意一点,在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: "NEW . column_name"或者"OLD . column_name".

一个我写的delete的例子,用来保存delete后的数据:

DELIMITER $$;

DROP TRIGGER `gbk`.`RECORDDELETE`$$

CREATE TRIGGER `gbk`.`RECORDDELETE` AFTER DELETE on `gbk`.`articles`
FOR EACH ROW BEGIN

DECLARE d_md5 CHAR(32);

SET d_md5 = MD5(CONCAT(OLD.id, '-singer'));

INSERT INTO `gbk`.`delete_record` (`md5`, `key`, `table`, `id`) VALUES (d_md5, OLD.title, 'singer', OLD.id);

END$$

DELIMITER ;$$

希望能提供一个参考

推荐(0)
收藏