是否可以创建一个 MySQL 存储过程,可以执行给定的插入或更新,然后让它连接到第二台服务器并运行相同的命令?我基本上想调用一台服务器并实时将其备份到第二台服务器。除非您有一两个方便的链接或其他解决方案,否则只需 yah 或 ney 就足够了。
感谢您的时间。Aaron
答案1
但只能在以下 3 个特定条件下才能这样做:
您在另一台服务器上更新的第二个表是:
- MyISAM 表
- 与第一台服务器中的表结构完全相同
- 在 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;
首先,确保表结构是 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 ;
就是这样。
试一试!!!