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