用mysql的federated数据引擎和触发器实现跨服务器表数据同步

     现有服务器A和服务器B,分别装有mysql数据库,存在同一个库名的数据库,并且库中有相同的表,2服务器可外网访问,要实现服务器A中数据库发生inset,update 时把响应到的数据记录同步到服务器B中的数据库中。

       

     1, 检查mysql是否支持federated数据引擎,若不支持可能需要修改mysql配置文件;

     2,增加mysql触发器,让触发器把数据同步到federated表中,这时该服务器federated 表会通过一个可访问B数据库的帐户把数据同步到B数据库表中;


    -- 查看开启的储存引擎

 
   SHOW ENGINES;
 
   -- 若没有federated 引擎需要配置my.ini 文件。
   --在[mysqld]后面直接加federated,并且注释掉skip-federated(前面加#)

<strong>-- 创建federated引擎表</strong>
  我们用用户表user实例

 CREATE TABLE `fed_user` (
  `uid` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `user_name` char(17) DEFAULT NULL COMMENT '用户名',
  `user_pwd` char(32) DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `user_name` (user_name`),
) ENGINE=FEDERATED CONNECTION='mysql://triggeruser:123456@192.168.1.2:3306/db_name/table_name'; 
 


ENGINE=FEDERATED CONNECTION='mysql://triggeruser:123456@192.168.1.2:3306/db_name/table_name';

关键是这一行,其中triggeruser为访问另外一台服务器上mysql的用户名,后面123456是密码。先要保证这个帐户可以访问到192.168.1.2这台服务器的mysql。
当然要注意3306这个端口。若不能访问看下是不是没有这个帐户在当前服务器ip下的访问权限。比如当前服务器是192.168.1.3,就要看下192.168.1.2 是不是
允许192.168.1.3通过triggeruser这个用户名和123456这个密码在3306端口访问。


实现了上面的操作,可以试试在192.168.1.3服务器的fed_user 表中插入数据后,192.168.1.2 是不是已经有了该条记录,实现了手动的数据同步,现在我们再通过mysql的触发器实现数据的自动同步。


创建触发器:(触发器具体方法可以百度下)

DELIMITER $$

CREATE
    TRIGGER `user_insert_trigger` AFTER INSERT ON `user` 
    FOR EACH ROW BEGIN
    -- 插入数据
    INSERT INTO `fed_user`(
`uid`, 
`user_name`, 
`user_pwd`, 
) VALUES (
new.`uid`, 
new.`user_name`, 
new.`user_pwd`,        
    );

    END;
$$

DELIMITER ;

其中user_insert_trigger 是触发器名,after insert on 是在插入表格之前触发,new.是插入之前的值,old.是数据完成之后的值,若是insert就是插入,若是update是就更新之后的值。



这个同步的总思路就是通过federated 数据引擎实现跨服务器数据同步,加上触发器就是自动同步。


数据-》触发器-》fed表-》另外的服务器

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yijiliangfang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值