2015-06-12 6 views
0

Здесь у меня есть два сервера mysql на разных серверах, и я не хочу копировать одну таблицу данных в другую с помощью FEDERATED.FEDERATED с помощью триггера в mysql

Но использование ниже кода запуска не работает, и даже нет ошибки.

Найти оригинал & Структура объединенного стола ниже.

Оригинал Структура таблица для таблицы 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

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

Я не думаю, что это способ использовать FEDERATED таблицу.

это ошибка или вы на самом деле с помощью:

ENGINE=InnoDB DEFAULT [...] CONNECTION 

Кроме того, федеративный не делает использование индексов и триггеров не работают.

Я думаю, вы бы лучше с помощью правильной репликации от одного сервера к серверу два и создать все ваши триггеры на сервере 2, возможно, на другом столе, который отражает таблицу реплицируется с сервера 1

+0

Можете ли вы предложить мне любой способ для репликации с сервера один на сервер две данные на основе условия? –

+0

Нет, что бы я сделал, как я сказал ранее, было бы репликация данных от мастера и создание «рабочей» таблицы со всеми триггерами, которые могут понадобиться вам непосредственно на подчиненном – sathia

-1

Если вы хотите для определения федеративной таблицы, установите ENGINE = FEDERATED

Таким образом, вам не нужны триггеры, потому что таблица FEDERATED - это просто представление (или ссылка на) исходной таблицы. Все запросы, которые вы делаете в федеративной таблице, выполняются на исходном сервере (таблице).