Может ли хранимая процедура MySQL вставлять / обновлять удаленный резервный сервер MySQL?
Можно ли создать хранимую процедуру MySQL, которая может выполнить данную вставку или обновление, а затем подключить ее ко второму серверу и выполнить те же команды? Я хочу в основном вызвать один сервер и в реальном времени сделать его резервную копию на втором сервере. Достаточно только да или нет, если у вас нет ссылки, двух удобных или другого решения.
Спасибо за ваше время. Аарон
1 ответ
Вы можете, но только при 3 конкретных условиях:
Вторая таблица, которую вы обновляете на другом сервере:
- таблица MyISAM
- идентично той же структуре таблицы, что и на первом сервере
- представлен в MySQL на первом сервере в качестве механизма хранения FEDERATED
Во-первых, убедитесь, что у вас включен движок FEDERATED в MySQL
Просто беги SHOW ENGINES;
Если механизм хранения FEDERATED не существует или отключен, не читайте дальше.
В противном случае вы можете попробовать это, записав его как триггер INSERT AFTER и триггер UPDATE AFTER.
Для этого примера:
- SERVER1 имеет базу данных
this_db
со столомthis_table
- SERVER2 имеет базу данных
that_db
со столомthat_table
- SERVER2 имеет IP-адрес
10.20.30.250
Структура таблицы выглядит следующим образом:
CREATE TABLE `this _table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fruit` char(10) NOT NULL,
`number` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
Во-первых, убедитесь, что структуры таблиц MyISAM и идентичны...
На первом сервере сделайтеSHOW CREATE TABLE this_db.this_table\G
На другом сервере сделайтеSHOW CREATE TABLE that_db.that_table\G
На первом сервере запустите это:
CREATE TABLE this_db.that_table LIKE this_db.this_table;
На первом сервере запустите это:
ALTER TABLE this_db.that_table ENGINE=FEDERATED CONNECTION='mysql://10.20.30.250/that_db/that_table';
На первом сервере создайте триггер INSERT AFTER для
this_db.this_table
:use this_db DELIMITER $$ CREATE TRIGGER this_table afterinsert AFTER INSERT ON this_table FOR EACH ROW INSERT INTO that_table (id,fruit,number) VALUES (NEW.id,NEW.fruit,NEW.number); $$ DELIMITER ;
На первом сервере создайте триггер UPDATE AFTER для
this_db.this_table
:use this_db DELIMITER $$ CREATE TRIGGER this_table afterupdate AFTER UPDATE ON this_table FOR EACH ROW UPDATE that_table SET fruit=NEW.fruit,number=NEW.number WHERE id=OLD.id; $$ DELIMITER ;
Вот и все.
Попробуйте!