Bob*_*anz 4 mysql stored-procedures database-backup federated
是否可以创建一个 MySQL 存储过程,该过程可以执行给定的插入或更新,然后还可以连接到第二台服务器并运行相同的命令?我想基本上调用一台服务器并实时将其备份到第二台服务器。除非您有一个或两个方便的链接或其他解决方案,否则只需一个 yah 或 ney 就足够了。
感谢您的时间。亚伦
您可以,但只能在 3 个特定条件下:
您在另一台服务器上更新的第二个表是:
首先,确保您在 MySQL 中启用了 FEDERATED 引擎
只需运行SHOW ENGINES;
如果 FEDERATED 存储引擎不存在或被禁用,请不要进一步阅读。
否则,您可以尝试将其编写为 INSERT AFTER 和 UPDATE AFTER 触发器。
对于这个例子:
this_db
带表的数据库this_table
that_db
带表的数据库that_table
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;
Run Code Online (Sandbox Code Playgroud)
首先,确保表结构是 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;
Run Code Online (Sandbox Code Playgroud)在第一台服务器上,运行:
ALTER TABLE this_db.that_table ENGINE=FEDERATED
CONNECTION='mysql://10.20.30.250/that_db/that_table';
Run Code Online (Sandbox Code Playgroud)在第一台服务器上,针对this_db.this_table
以下对象创建一个 INSERT AFTER 触发器:
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 ;
Run Code Online (Sandbox Code Playgroud)在第一台服务器上,针对this_db.this_table
以下对象创建 UPDATE AFTER 触发器:
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 ;
Run Code Online (Sandbox Code Playgroud)就是这样。
试一试!!!
归档时间: |
|
查看次数: |
11934 次 |
最近记录: |