2015-06-12 66 views
0

在這裏,我有兩個不同的服務器上的MySQL服務器,我不想複製一個表數據到另一個使用FEDERATED。在mysql中使用觸發器FEDERATED

但使用下面的觸發代碼它不工作,甚至沒有錯誤。

查找原圖&下面的聯邦表結構。

爲表vxp_config

CREATE TABLE IF NOT EXISTS `vxp_config` (
    `cfg_id` int(11) NOT NULL AUTO_INCREMENT, 
    `cfg_key` varchar(50) NOT NULL, 
    `cfg_value` varchar(500) NOT NULL, 
    `cfg_field_type` enum('TEXT','TEXTAREA','FILE','CHECKBOX') NOT NULL DEFAULT 'TEXT', 
    PRIMARY KEY (`cfg_id`), 
    UNIQUE KEY `cfg_key` (`cfg_key`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

聯合表結構表vxp_config

原稿臺結構3210
CREATE TABLE IF NOT EXISTS `vxp_config` (
    `cfg_id` int(11) NOT NULL AUTO_INCREMENT, 
    `cfg_key` varchar(50) NOT NULL, 
    `cfg_value` varchar(500) NOT NULL, 
    `cfg_field_type` enum('TEXT','TEXTAREA','FILE','CHECKBOX') NOT NULL DEFAULT 'TEXT', 
    PRIMARY KEY (`cfg_id`), 
    UNIQUE KEY `cfg_key` (`cfg_key`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 CONNECTION='mysql://root:[email protected]:3306/replicate/vxp_config'; 

觸發器vxp_config

DROP TRIGGER IF EXISTS `config_bd`; 
DELIMITER // 
CREATE TRIGGER `config_bd` BEFORE DELETE ON `vxp_config` 
FOR EACH ROW BEGIN 
    DELETE FROM vxp_config 
    WHERE cfg_id= OLD.cfg_id; 
END 
// 
DELIMITER ; 
DROP TRIGGER IF EXISTS `config_bi`; 
DELIMITER // 
CREATE TRIGGER `config_bi` BEFORE INSERT ON `vxp_config` 
FOR EACH ROW BEGIN 
    INSERT INTO vxp_config (cfg_id,cfg_key, cfg_value,cfg_field_type) VALUES (NEW.cfg_id,NEW.cfg_key, NEW.cfg_value,NEW.cfg_field_type); 
END 
// 
DELIMITER ; 
DROP TRIGGER IF EXISTS `config_bu`; 
DELIMITER // 
CREATE TRIGGER `config_bu` BEFORE UPDATE ON `vxp_config` 
FOR EACH ROW BEGIN 
    UPDATE vxp_config 
    SET cfg_id= NEW.cfg_id, 
     cfg_key= NEW.cfg_key, 
     cfg_value = NEW.cfg_value, 
     cfg_field_type = NEW.cfg_field_type 
    WHERE cfg_id = OLD.cfg_id; 
END 
// 
DELIMITER ; 

回答

0

我不認爲這是使用聯合表格的方式。

是一個錯誤,或者你實際使用的是:

ENGINE=InnoDB DEFAULT [...] CONNECTION 

此外,聯盟不使用索引和觸發器不工作。

我認爲你會使用正確複製從服務器的一個富裕到服務器的兩個和創建所有觸發器在服務器2,可能對反映從服務器1

+0

你可以請我建議任何方式從服務器複製到服務器兩個基於條件的數據? –

+0

不,我會這樣做,正如我之前所說的那樣,將複製master的數據,並將所有可能需要直接在從站上的觸發器設置爲「工作」表 – sathia

-1

當你要複製的表另一個表定義聯邦表,設置 ENGINE = FEDERATED

這樣,您不需要觸發器,因爲FEDERATED表只是表示(或鏈接到)原始表。您在聯合表上執行的所有查詢均在原始服務器(表)上執行。