Назад | Перейти на главную страницу

Может ли хранимая процедура MySQL вставлять / обновлять удаленный резервный сервер MySQL?

Можно ли создать хранимую процедуру MySQL, которая может выполнять заданную вставку или обновление, а затем также подключать ее ко второму серверу и запускать те же команды? Я хочу в основном вызвать один сервер и в режиме реального времени сделать резервную копию на втором сервере. Просто yah или ney будет достаточно, если у вас нет ссылки или двух под рукой или другого решения.

Спасибо за уделенное время. Аарон

Вы могли, но только при трех определенных условиях:

Вторая таблица, которую вы обновляете на другом сервере:

  1. таблица MyISAM
  2. идентично та же структура таблицы, что и на первом сервере
  3. представлен в MySQL на первом сервере как механизм хранения FEDERATED

Во-первых, убедитесь, что в MySQL включен движок FEDERATED.
Просто беги 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;
  1. Во-первых, убедитесь, что структуры таблиц соответствуют MyISAM и идентичны ...
    На первом сервере выполните SHOW CREATE TABLE this_db.this_table\G
    На другом сервере выполните SHOW CREATE TABLE that_db.that_table\G

  2. На первом сервере запустите это:

    CREATE TABLE this_db.that_table LIKE this_db.this_table;
    
  3. На первом сервере запустите это:

    ALTER TABLE this_db.that_table ENGINE=FEDERATED
    CONNECTION='mysql://10.20.30.250/that_db/that_table';
    
  4. На первом сервере создайте триггер 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 ;
    
  5. На первом сервере создайте триггер 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 ;
    

Вот и все.

Попробуйте !!!