【问题标题】:How to create trigger to insert data to a database on another server如何创建触发器以将数据插入另一台服务器上的数据库
【发布时间】:2014-12-17 15:50:52
【问题描述】:

我在不同的主机上有 2 个 mysql 数据库,希望在将数据插入一个数据库后触发它插入另一个数据库。我是 mysql 新手,在 sql server 中我可以创建链接服务器并执行此操作。但是在mysql中怎么办? 两个数据库都有相似的表

CREATE TABLE `tsttbl` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` smallint(6) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

【问题讨论】:

  • 如果在用户上运行的触发器应该可以访问这两个数据库,这可以很容易地完成。并且触发器很容易创建检查这里stackoverflow.com/questions/8910617/…,示例是更新后您可以将其更改为插入后。
  • 感谢回复,我知道如何创建触发器,但我不知道如何从触发器连接到另一个数据库表
  • 好吧,您需要 mysql 用户可以访问这两个数据库,然后创建触发器以在该用户 definer 上执行,该用户应该可以完成这项工作。但这仅适用于同一主机。由于您的数据库位于不同的主机中,您可能需要某种应用程序层来使用 REST 或 CURL 或 SOAP 来完成这项工作。或者可能是联邦存储引擎dev.mysql.com/doc/refman/5.6/en/federated-storage-engine.html
  • 我在 stackoverflow 上阅读了另一个问题/答案,那么联合引擎呢?
  • 是的,我更新了我的最后一条评论,加入了关于 FEDERATED 存储引擎的信息

标签: mysql sql


【解决方案1】:

为了能够继续此操作,您必须首先确保两台服务器具有相同的配置。为了完成您想做的事情,可以在两台服务器上使用 FEDERATED storage engine 并结合触发器,以允许每台服务器更新另一台服务器的数据库。

您需要创建与另一台服务器上的用户表联合的本地表。因此,如果另一台服务器上已经存在一条记录,但此处不存在,我们希望另一台服务器上的插入会抛出一个错误,阻止我们在此处创建记录……而不是在此处创建一条记录ID 冲突;

CREATE TABLE remote_user (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `age` smallint(6) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
CONNECTION='mysql://username:pass@the_other_host:port/schema/user';

然后你就可以创建你的触发器了;

DELIMITER $$

CREATE TRIGGER user_bi BEFORE INSERT ON user FOR EACH ROW
BEGIN
  INSERT INTO remote_user (ID,name, age) VALUES (NEW.ID,NEW.name, NEW.Age);
END $$

CREATE TRIGGER user_bu BEFORE UPDATE ON user FOR EACH ROW
BEGIN
  UPDATE remote_user 
     SET ID= NEW.ID,
         name= NEW.name
         age = NEW.Age
   WHERE ID = OLD.ID;
END $$

CREATE TRIGGER user_bd BEFORE DELETE ON user FOR EACH ROW
BEGIN
   DELETE FROM remote_user
   WHERE ID= OLD.ID;
END $$

DELIMITER ;

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 2011-03-18
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2011-05-23
    • 1970-01-01
    相关资源
    最近更新 更多