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
另外,實際操作中遇到,在別的服務器上在執行創建命令時,表創建成功,但是沒有字段,而且一直在讀秒,這基本就是失敗了,暫時沒找到原因,猜想是權限或者是數據版本差別太大的原因。
