0.前言

前面几篇文章,分别说了同一个服务器同一个数据库的触发器同步

同一个服务器,不同数据库之间通过触发器同步。

这篇文章,我们介绍一下,不同服务器之间的数据同步。

两个不同服务器上的数据库的两个表要做同步,本来想做主从的,最后由于种种原因放弃了,于是考虑是用FEDERATED做两个表的同步。

1.安装及开启服务

很多博文上说,直接找到mysql的配置文件,在mysql的配置文件中加入federated,然后重启mysql服务就行。但是,实际上,如果你没有这个的话,第一步应该先安装。

我们执行

 show ENGINES

如果没有下面这一行,我们就要执行安装指令。

在mysql命令行执行安装指令:

 install plugin federated soname ‘ha_federated.so’;

然后重启mysql服务,再次执行show ENGINES 就能看到了。

2.格式及例子
ENGINE=FEDERATED  CONNECTION = 'mysql://user:password@ip:port/databaseName/tableName'

比如下面这样:

CREATE TABLE `user2` (
  `id` varchar(255) NOT NULL COMMENT 'id',
  `code` varchar(255) DEFAULT NULL COMMENT '代码',
  PRIMARY KEY (`id`),
  UNIQUE KEY `upk_user_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='用户表'
ENGINE=FEDERATED CONNECTION='mysql://root:pwd#102021@123.172.123.123:3306/myapp/user';

经过测试, 如果语句测试通过,那么我在主表user2中添加一条信息,在myapp数据库中的user表中则会自动同步一条数据。

反之也成立。

3.一些问题

实际操作中遇到一些问题,比如,数据库连接密码中有’@’符号,报错:

Can’t create federated table. The data source connection string ‘mysql://root:pwd@2192432@123.123.123.123:3306/test’ is not in the correct format

请参考这篇文章解决。

另外,实际操作中遇到,在别的服务器上在执行创建命令时,表创建成功,但是没有字段,而且一直在读秒,这基本就是失败了,暂时没找到原因,猜想是权限或者是数据版本差别太大的原因。

分类: mysql