Um procedimento armazenado do MySQL é capaz de inserir / atualizar para um servidor MySQL de backup remoto?

4

É possível criar um procedimento armazenado no MySQL que possa executar uma determinada inserção ou atualização e, em seguida, conectá-lo a um segundo servidor e executar os mesmos comandos? Eu quero basicamente chamar um servidor e em tempo real fazer backup para o segundo servidor. Apenas um yah ou ney seria suficiente, a menos que você tenha um link ou dois úteis ou outra solução.

Obrigado pelo seu tempo. Aaron

    
por BobFranz 14.02.2011 / 02:39

1 resposta

5

Você poderia, mas apenas sob 3 condições específicas:

A segunda tabela que você está atualizando em outro servidor é:

  1. uma tabela MyISAM
  2. identicamente a mesma estrutura de tabela que no primeiro servidor
  3. representado no MySQL no primeiro servidor como mecanismo de armazenamento FEDERADO

Primeiro, verifique se você tem o mecanismo FEDERATED habilitado no MySQL | Apenas execute SHOW ENGINES;

Se o mecanismo de armazenamento FEDERATED não existir ou estiver desativado, não leia mais.

Caso contrário, você pode tentar isso escrevendo-o como um gatilho INSERT AFTER e UPDATE AFTER.

Para este exemplo:

  • O SERVER1 tem o banco de dados this_db com a tabela this_table
  • O SERVER2 possui o banco de dados that_db com a tabela that_table
  • O SERVER2 tem o endereço IP 10.20.30.250

A estrutura da tabela se parece com isso:

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. Primeiro, verifique se as estruturas da tabela são MyISAM e idênticas ...
    No primeiro servidor, faça SHOW CREATE TABLE this_db.this_table\G
    No outro servidor, faça SHOW CREATE TABLE that_db.that_table\G

  2. No primeiro servidor, execute isto:

    CREATE TABLE this_db.that_table LIKE this_db.this_table;
    
  3. No primeiro servidor, execute isto:

    ALTER TABLE this_db.that_table ENGINE=FEDERATED
    CONNECTION='mysql://10.20.30.250/that_db/that_table';
    
  4. No primeiro servidor, crie um gatilho INSERT AFTER contra 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. No primeiro servidor, crie um gatilho UPDATE AFTER contra 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 ;
    

É isso.

Experimente !!!

    
por 14.02.2011 / 22:53