Mysql 跨服务器表数据同步的实现
今天在做项目的时候突然接到一个这样的需求。
有两个数据库(数据库A和数据库B)分别部署在两个不同的服务器上。当数据库A里的数据发生改变时,数据库b里的数据要同步变化。
在这里记录一下小编是怎么做的。当然解决这个问题的办法应该不止一个。小编这个方法只是其一。
第一步
通过以下sql语句查看一下mysql是否安装了federated插件:
show engines;
在查出来的结果中找到“FEDERATED”,查看一下后面的值是“yes”还是“no”。
如果是“yes”,说明已经安装过插件,如果是“no”,请执行下面的sql语句进行安装。
install plugin federated soname ‘ha_federated.so’;
第二步
找到你计算机上mysql的my.ini配置文件,在[mysqld]最后添加federated即可;添加完成,重启mysql服务再次查询该引擎状态为YES即可。
第三步
在数据库A所对应的服务器上创建桥接表.表名与数据库b中需要同步的表名一致。sql如下:
CREATE TABLE `桥接表名` (
。。。字段信息。。。
) ENGINE = FEDERATED AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 CONNECTION = "mysql://用户名:密码@服务器B的ip地址:端口号/数据库名/表名"
第四步
在数据库A所对应的服务器上创建触发器,sql如下(本文以插入触发为例):
DELIMITER $
CREATE TRIGGER 触发器名称
after
insert ON 数据库A上的表名
FOR EACH ROW
begin
insert into 桥接表名(字段信息) VALUES(数据库A上表字段信息);
end$
第五步
先执行第三步的sql再执行第四部的sql。然后修改数据库A中表的数据,数据库B中表的数据会发生相同的变化。