web-dev-qa-db-ja.com

MySQLストアドプロシージャは、リモートバックアップMySQLサーバーに挿入/更新できますか?

特定の挿入または更新を実行できるMySQLストアドプロシージャを作成してから、2番目のサーバーに接続して同じコマンドを実行することは可能ですか?基本的に1台のサーバーを呼び出し、リアルタイムで2台目のサーバーにバックアップしたいと思います。あなたがリンクまたは2つの便利なまたは別の解決策を持っていない限り、ただのヤーまたはニーで十分です。

お時間をいただきありがとうございます。アーロン

4
BobFranz

次の3つの特定の条件下でのみ可能です。

別のサーバーで更新している2番目のテーブルは次のとおりです。

  1. myISAMテーブル
  2. 最初のサーバーとまったく同じテーブル構造
  3. 最初のサーバーのMySQLでストレージエンジンFEDERATEDとして表されます

まず、MySQLでFEDERATEDエンジンが有効になっていることを確認します
SHOW ENGINES;を実行するだけです

FEDERATEDストレージエンジンが存在しないか無効になっている場合は、これ以上読みません。

それ以外の場合は、INSERTAFTERおよびUPDATEAFTERトリガーとして書き込むことでこれを試すことができます。

この例の場合:

  • 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. 最初のサーバーで、this_db.this_tableに対してINSERTAFTERトリガーを作成します。

    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. 最初のサーバーで、this_db.this_tableに対してUPDATEAFTERトリガーを作成します。

    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 ;
    

それでおしまい。

試してみる!!!

5
RolandoMySQLDBA