MySQL 存储过程是否能够插入/更新到远程备份 MySQL 服务器?

MySQL 存储过程是否能够插入/更新到远程备份 MySQL 服务器?

是否可以创建一个 MySQL 存储过程,可以执行给定的插入或更新,然后让它连接到第二台服务器并运行相同的命令?我基本上想调用一台服务器并实时将其备份到第二台服务器。除非您有一两个方便的链接或其他解决方案,否则只需 yah 或 ney 就足够了。

感谢您的时间。Aaron

答案1

但只能在以下 3 个特定条件下才能这样做:

您在另一台服务器上更新的第二个表是:

  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 ;
    

就是这样。

试一试!!!

相关内容